正在逃离bookmarklet中未跳过的原始字符串

Escaping raw, unescaped strings in bookmarklet

本文关键字:原始 字符串 逃离 bookmarklet      更新时间:2024-05-04

我正试图为Chrome编写一个搜索引擎bookmarklet,但我在转义字符串时遇到了问题。

例如,如果搜索引擎bookmarklet如下:

javascript:alert("%s"); //%s is the search engine query, passed literally by chrome.

然后在以下字符串上运行它将给出不正确的结果:

c:'zebra
c:zebra instead of c:'zebra

如果斜杠后面的字符恰好是一个实际的转义字符,则结果会因字符而异。

我尝试过转义和取消对字符串的捕获,我尝试过对其进行reg-exp'ing,并用双斜杠替换斜杠,但我无法找到实现这一点的方法,因为原始字符串第一次进入脚本时,它是取消捕获的,之后的任何操作都会错误地看到它。

如何正确处理?

到目前为止,我只能在chrome:中完成这项工作

javascript: var str = (function(){STARTOFSTRING:/*%s*/ENDOFSTRING:;}).toString().match( /STARTOFSTRING:'/'*(['s'S]*)'*'/ENDOFSTRING:/ )[1]; alert(str);

写入c:''zebra将提醒c:''zebra。

不幸的是,Firefox在反编译时无法维持函数体中的注释。

您也不能在字符串中写入序列*/,但其他所有内容都应该按字面传递,包括引号" '