javascript - 为什么 bookmarklet 在 Twitter 上不起作用

标签 javascript bookmarklet

我从 here 中获取了以下书签:

javascript:var a='';
for(var ln=0;ln<document.links.length;ln++)
   {var lk=document.links[ln];
    a+=ln+': <a href=\''+lk+'\' title=\''+lk.text+'\'>'+lk+'</a><br>\n';
   }
w=window.open('','Links','scrollbars,resizable,width=800,height=600');
w.document.write(a)

为什么它在 Twitter 主站点上不起作用: https://twitter.com/search?q=from%3Abmw%20since%3A2016-07-01%20until%3A2016-07-31&src=typd

它在移动网站上运行得很好: https://m.twitter.com/search?q=from%3Abmw%20since%3A2016-07-01%20until%3A2016-07-31&src=typd

要使用此小书签,请将其拖到您的书签栏,然后单击它。

最佳答案

这是一个 CSP(内容安全策略)问题。

使用 CSP,站点可以决定允许运行哪些脚本。 Twitter、GitHub 和其他一些人禁用了内联脚本,这使得书签在他们的网站上无法使用。

虽然 CSP 规范允许浏览器绕过此类限制以保持小书签、用户脚本等功能正常,但并未强制执行。 (它曾经是,但措辞从应该更改为可能。)不幸的是,Firefox doesn't seem to allow this对于小书签,除非您愿意完全禁用 CSP(about:config 中的 security.csp.enable),否则我不知道有任何设置可以绕过这。 (扩展仍然有效。)不过它在 Chrome 中有效——这就是为什么@albert 无法重现你的问题。

您可以自己尝试:转到 Twitter 并在地址栏中输入类似 javascript:alert('hello') 的内容。什么都不会发生,如果您打开 JS 控制台并启用安全日志,您会看到 CSP 阻止了您的脚本运行。

因此,简而言之:Bookmarklet 被牺牲在所谓的安全利益的祭坛上。

关于javascript - 为什么 bookmarklet 在 Twitter 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39505367/

相关文章:

testing - 用于在浏览器中交换(实时和测试)URL 的书签

javascript - 如何从本地驱动器上的 .js 文件中获取 JavaScript 代码并在 IE11 中运行它?

javascript - 如何检测是否安装了 Firefox 扩展

javascript - Angular 2 : What does binding event to 0 mean?

javascript - 如何在 javascript 中通过特殊字符分割字符串\

javascript - 如何检查网站是否允许我用我的小书签注入(inject) Javascript?

javascript - 在小书签中使用 JS setTimeout

firefox - 用于保存文件的书签

javascript - 如何快速缩放javascript中的二维数组?

Java应用程序将 "forward"数据从TCPSocket到WebSocket?