我的书签是JavaScript书签。例如:
javascript:alert('hi');
我希望能够从书签本身获取当前运行的JavaScript书签的来源,所以在伪代码中:
javascript:alert(currentlyExecutingScript.text);
哪会警告
javascript:alert(currentlyExecutingScript.text);
我该怎么做?我更喜欢跨浏览器解决方案,但仅使用Chrome特定解决方案就完全没问题了!
为什么我对此感兴趣?因为我正在写一个引用自己的书签。
答案 0 :(得分:4)
由于location
是指当前网页的网址,并且JavaScript书签不会更改location
,因此在任何当前浏览器中都无法做到这一点。
但是, 可以在JavaScript中执行您想要的操作:
javascript:void function f(){alert(f.toString())}()
这将alert
以下内容:
function f(){alert(f.toString())}
toString()
方法在函数上调用时,返回表示函数源代码的字符串(参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString)。
@SergeSeredenko建议使用void
。
使用立即调用的函数表达式时,可以使用
void
强制将function关键字视为表达式而不是声明。
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void#Immediately_Invoked_Function_Expressions
答案 1 :(得分:0)
你可以用一个字符串写一个你的脚本,用一个邪恶的eval
来执行它,脚本有一个自己的引用:
javascript:var script = "alert('hi'); alert(script)";
eval(script);
它会警告" hi",然后是script
的内容。
答案 2 :(得分:0)
最简单但最明确的不最安全的实现方法是将代码存储在字符串中,并在单击书签时评估该字符串。
var code = "alert('Hi');var num = 988;alert(num + 12)";
//code contains the code you wish to run
eval(code);
//runs the code.
alert(code);
//alerts the code.
我会非常小心使用eval()
函数。
有关详细信息,请参阅this SO question。