我从 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/