Javascript bookmarklet在某些网站上失败了,创建了幽灵般的新<html>页面
Javascript bookmarklet fails on certain sites, creates ghostly new <html> page
我注意到我的Javascript书签在某些网站(如Google Reader和Google搜索结果页面)上失败了(在一些非Google网站上随机失败)。查看控制台,我可以看到,对于这些页面,单击bookmarklet并没有像通常那样向标题/正文添加元素,而是创建了一个新文档,看起来像这样:
<html>
<head></head>
<body></body>
</html>
即使我将书签减小到javascript:alert(window.location.href);
,它也会创建这个空白页并在其中运行书签,因此警报显示about:blank
。在大多数网站上,这个空白页是不创建的,并显示正确的位置。
有人能解释一下吗?这些站点是否将外部运行的代码沙箱作为一种安全措施?
UPDATE:我目前无法在Chrome 17.0.932.0 dev以外的浏览器上复制此内容。请让我知道是否有人可以在Chrome或其他浏览器上复制这些结果。
我认为这是一个bug在谷歌浏览器,我已经提交到他们的bug数据库:https://bugs.webkit.org/show_bug.cgi?id=72606
您需要确保最上面的代码,即javascript:
之后的代码不返回任何内容。
通常这是通过在void()
中包装所有内容来完成的:
javascript:void(alert(window.location.href));
这是非常奇怪的,它打破了alert()
虽然,因为函数本身不返回任何东西…
如果javascript:
url返回一个字符串,它将被用来创建一个新的文档:
javascript:'foo bar baz';
如果您不知道要注意它,这可能是一个很难调试的问题。如果您使用返回字符串的函数,或者在bookmarklet结束时使用设置字符串值的行,则可能会弹出:
javascript: a = prompt('foo bar baz'); b = a;
一个简单的解决方案是使用闭包:
javascript:(function(){ var a; a = prompt('foo bar baz'); window.b = a}());
也可以以void 0;
javascript: a = prompt('foo bar baz'); b = a; void 0;
- 使用javascript将动态表从一个html页面打印到另一个html页
- 在chrome.tabs.onCreated之后加载HTML页面
- 使用chrome扩展编辑页面html
- 阻止WordPress自动格式化页面HTML
- 如何将数据从一个页面传递到另一个页面html
- 如何使用ceratin Javascript逻辑更新JSP页面html元素
- 我可以通过Javascript从另一个网页获取特定的页面HTML代码吗?
- 淡入 在页面 html 之间淡出并使用数组脚本更改图像
- 我使用XMLHttpRequest作为菜单,当我请求一个包含javascript的页面HTML时,没有任何反应,为什么
- 如何强制浏览器缓存页面.html
- 如何在jQuery中加载页面html和内容(如图像)
- 复制的文件不起作用 - ID在不同页面HTML JavaScript PHP中不起作用
- 如何在没有实际页面刷新的情况下更新页面html和url
- 使用javascript转到另一个页面html
- 如何在页面html区域APEX(Oracle Application Express)上使用共享组件静态文件或CSS文件
- 替换页面html中多次出现的单词
- 如何避免在菜单下拉菜单中重新加载页面?HTML与JQUERY
- 无法重定向其他页面(HTML、Javascript)中的输出
- 提交操作,但显示不同的页面HTML
- 将文本框的值传递给另一个页面html