繁体   English   中英

Javascript bookmarklet在某些网站上失败,创建了ghostly new <html> 页

[英]Javascript bookmarklet fails on certain sites, creates ghostly new <html> page

我注意到我的Javascript bookmarklet在某些网站上失败了,比如谷歌阅读器和谷歌搜索结果页面(并在一些非谷歌网站上随机出现)。 看一下控制台,我可以看到,对于这些页面,单击bookmarklet并没有像往常那样将元素附加到头部/主体,而是创建了一个如下所示的新文档:

<html>
  <head></head>
  <body></body>
</html>

即使我将我的书签缩小为javascript:alert(window.location.href); 它将创建此空白页面并在其中运行书签,以便警报显示about:blank 在大多数网站上,不会创建此空白页面并显示正确的位置。

有人可以解释一下吗? 这些沙盒外部网站是否将代码作为安全措施?

更新 :我目前无法在Chrome 17.0.932.0 dev以外的浏览器上重现这一点。 如果其他人可以在Chrome或其他方面重现这些结果,请与我们联系。

你需要确保最顶层的代码,即javascript:后面的代码javascript:不返回任何内容。

通常这是通过将所有内容包装在void()

javascript:void(alert(window.location.href));

虽然因为函数本身没有返回任何东西,但它与alert()打破是很奇怪的...

我认为这是Google Chrome中的一个错误,我已将其归档到他们的错误数据库: https//bugs.webkit.org/show_bug.cgi?id = 72606

如果javascript: url返回一个字符串,它将用于创建一个新文档:

javascript:'foo bar baz';

如果您不知道要注意它,这可能是一个难以调试的问题。 如果您使用返回字符串的函数或使用设置字符串值的行结束书签,则可以突然显示:

javascript: a = prompt('foo bar baz'); b = a;

一个简单的解决方案是使用一个闭包:

javascript:(function(){ var a; a = prompt('foo bar baz'); window.b = a}());

另一种方法是以void 0;结束void 0;

javascript: a = prompt('foo bar baz'); b = a; void 0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM