问题描述
我有一个书签。当用户单击书签时,它会插入一小段代码。这段代码插入了一个脚本元素,它依次获取执行工作的实际脚本。
这适用于大多数网站,但有些网站通过其内容安全策略阻止脚本。例如,他们可能有
content-security-policy: script-src 'self'
但是,有些网站的脚本被阻止了,但我看不到是什么政策阻止了它。一种情况是 bbc.co.uk,例如 https://www.bbc.co.uk/food/recipes/korean-style_mapo_tofu_50944
在开发者工具网络选项卡中,它说 myscript.js 是
blocked(csp)
然而,我没有看到这个页面的 csp 政策,就像我看到其他阻止脚本的网站一样。
什么阻止了脚本请求?
这是完整的书签代码。 myscript.js 被替换为通用库,以便其他人可以测试。
javascript:(function(){var s=document.createElement('script');s.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/3.5.1 /jquery.min.js?'+new Date().getTime());document.getElementsByTagName('body')[0].appendChild(s);})();
更漂亮:
javascript:(function(){
var s=document.createElement('script');
s.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js?'+new Date().getTime());
document.getElementsByTagName('body')[0].appendChild(s);
})();
日期参数只是为了防止网页使用缓存版本。
解决方法
pip show pytube
在元标记中发布 Content-Security-Policy:
bbc.co.uk
不幸的是,如果网页有自己的 CSP,它会阻止书签脚本。