为什么 bookmarklet 在 Twitter 上不起作用
Why bookmarklet does not worrk on twitter
我从 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 规范允许浏览器绕过此类限制以保持小书签、用户脚本等功能正常,但并未强制执行。 (它曾经是,但措辞从 should 更改为 may。)不幸的是,Firefox doesn't seem to allow this 用于小书签,除非你我愿意完全禁用 CSP(security.csp.enable
in about:config
),我不知道有任何设置可以解决这个问题。 (扩展仍然有效。)它在 Chrome 中有效——这就是为什么 @albert 无法重现你的问题。
您可以自己尝试:转到 Twitter 并在地址栏中输入类似 javascript:alert('hello')
的内容。什么都不会发生,如果您打开 JS 控制台并启用安全日志,您会看到 CSP 阻止了您的脚本 运行ning。
所以,简而言之:Bookmarklets 被牺牲在所谓的安全利益的祭坛上。
我从 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 规范允许浏览器绕过此类限制以保持小书签、用户脚本等功能正常,但并未强制执行。 (它曾经是,但措辞从 should 更改为 may。)不幸的是,Firefox doesn't seem to allow this 用于小书签,除非你我愿意完全禁用 CSP(security.csp.enable
in about:config
),我不知道有任何设置可以解决这个问题。 (扩展仍然有效。)它在 Chrome 中有效——这就是为什么 @albert 无法重现你的问题。
您可以自己尝试:转到 Twitter 并在地址栏中输入类似 javascript:alert('hello')
的内容。什么都不会发生,如果您打开 JS 控制台并启用安全日志,您会看到 CSP 阻止了您的脚本 运行ning。
所以,简而言之:Bookmarklets 被牺牲在所谓的安全利益的祭坛上。