无法从另一台服务器加载脚本 - 内容安全策略问题?
Unable to load script from another server - Content Security Policy issue?
我一直在尝试将小书签变成一个小型开发环境,我可以用它来测试一些 javascript 并轻松地即时发送命令,并快速更新我服务器上的代码以查看结果。使用我在本网站和 google 中找到的方法,这已经成功了一半,但它似乎效果不佳,有时随机不起作用。最终目标是拥有一个我可以从任何页面单击的小书签,它会加载我保存在服务器上的 javascript 文件。我创建了以下两个小书签来尝试使其正常工作:
失败的方法 1:
javascript:
var s = document.createElement('script');
s.type='text/javascript';
document.body.appendChild(s);
s.src='//smewth.com/test.js';
void(0);
方法一单行书签形式:javascript: var s = document.createElement('script'); s.type='text/javascript'; document.body.appendChild(s); s.src='//smewth.com/test.js'; void(0);
失败的方法 2:
javascript:(
function(){
var imported = document.createElement('script');
imported.type='text/javascript';
imported.src = 'https://smewth.com/test.js';
document.head.appendChild(imported);
})();
方法二单行书签形式:javascript:( function(){ var imported = document.createElement('script'); imported.type='text/javascript'; imported.src = 'https://smewth.com/test.js'; document.head.appendChild(imported); })();
我通过分解 (http://kickassapp.com/) 中的 kickass 小书签获得了方法 1。我从他们网站上得到的实际版本在我的浏览器上运行良好,没有问题。我什至直接替换了他们用来加载我的 URL 的 URL。我在这个网站上搜索时发现的第二种方法实际上工作了一小会儿,但由于某种未知原因(可能是不同的浏览器)停止工作。我尝试将此脚本 object 附加到头部,并在每个脚本上附加 body,但没有改善结果。
我为此 post 创建了 test.js 脚本,它包含一个简单的警告框语句:
$$ [/]# cat test.js
alert("hi");
$$ [/]#
注意:当我使用嵌入在小书签本身中的代码而不将其附加到 head/body object 时,它可以正常工作,例如:
javascript:%20alert("hi");
我确实注意到,使用这两种方法,代码实际上都被注入了页面,但是当我单击书签时,我没有看到代码被执行。有谁知道哪种方法是最好的或类似的方法,这样我就可以 javascript 通过我在远程服务器上更新的页面加载(可靠地)?也许我需要附加到另一个 object?
感谢您的帮助。
-杰夫
更新:我展示的是这个网站加载时有效,但当你在像 google.com 这样的网站时它不起作用。不确定有什么区别或如何适应这一点,google.com 有一个头和一个 body object。我在一些网站上展示了这个作品,但在一些网站上却没有。
我想通了。发生了两件事,导致了此问题的间歇性症状。第一个问题是托管代码的站点位于自签名证书上。我开始注意到只有在尝试从安全站点内 运行 时才会出现此问题。然后在 Chrome 中,我看到控制台中出现错误。如果 Firefox 在控制台或其他地方给我一个错误,那就太好了,因为这是问题的根源。我必须做的第二件事是在 Firefox 中禁用 OCSP,因为我使用免费证书进行测试。
我还必须使用上述方法 1。出于某种原因,Firefox 和 Chrome 都不喜欢匿名函数调用。从现在开始,我将参考 Chrome 在控制台中查找错误,因为 Firefox 已证明自己对此不是很有用。
我一直在尝试将小书签变成一个小型开发环境,我可以用它来测试一些 javascript 并轻松地即时发送命令,并快速更新我服务器上的代码以查看结果。使用我在本网站和 google 中找到的方法,这已经成功了一半,但它似乎效果不佳,有时随机不起作用。最终目标是拥有一个我可以从任何页面单击的小书签,它会加载我保存在服务器上的 javascript 文件。我创建了以下两个小书签来尝试使其正常工作:
失败的方法 1:
javascript:
var s = document.createElement('script');
s.type='text/javascript';
document.body.appendChild(s);
s.src='//smewth.com/test.js';
void(0);
方法一单行书签形式:javascript: var s = document.createElement('script'); s.type='text/javascript'; document.body.appendChild(s); s.src='//smewth.com/test.js'; void(0);
失败的方法 2:
javascript:(
function(){
var imported = document.createElement('script');
imported.type='text/javascript';
imported.src = 'https://smewth.com/test.js';
document.head.appendChild(imported);
})();
方法二单行书签形式:javascript:( function(){ var imported = document.createElement('script'); imported.type='text/javascript'; imported.src = 'https://smewth.com/test.js'; document.head.appendChild(imported); })();
我通过分解 (http://kickassapp.com/) 中的 kickass 小书签获得了方法 1。我从他们网站上得到的实际版本在我的浏览器上运行良好,没有问题。我什至直接替换了他们用来加载我的 URL 的 URL。我在这个网站上搜索时发现的第二种方法实际上工作了一小会儿,但由于某种未知原因(可能是不同的浏览器)停止工作。我尝试将此脚本 object 附加到头部,并在每个脚本上附加 body,但没有改善结果。
我为此 post 创建了 test.js 脚本,它包含一个简单的警告框语句:
$$ [/]# cat test.js
alert("hi");
$$ [/]#
注意:当我使用嵌入在小书签本身中的代码而不将其附加到 head/body object 时,它可以正常工作,例如:
javascript:%20alert("hi");
我确实注意到,使用这两种方法,代码实际上都被注入了页面,但是当我单击书签时,我没有看到代码被执行。有谁知道哪种方法是最好的或类似的方法,这样我就可以 javascript 通过我在远程服务器上更新的页面加载(可靠地)?也许我需要附加到另一个 object?
感谢您的帮助。
-杰夫
更新:我展示的是这个网站加载时有效,但当你在像 google.com 这样的网站时它不起作用。不确定有什么区别或如何适应这一点,google.com 有一个头和一个 body object。我在一些网站上展示了这个作品,但在一些网站上却没有。
我想通了。发生了两件事,导致了此问题的间歇性症状。第一个问题是托管代码的站点位于自签名证书上。我开始注意到只有在尝试从安全站点内 运行 时才会出现此问题。然后在 Chrome 中,我看到控制台中出现错误。如果 Firefox 在控制台或其他地方给我一个错误,那就太好了,因为这是问题的根源。我必须做的第二件事是在 Firefox 中禁用 OCSP,因为我使用免费证书进行测试。
我还必须使用上述方法 1。出于某种原因,Firefox 和 Chrome 都不喜欢匿名函数调用。从现在开始,我将参考 Chrome 在控制台中查找错误,因为 Firefox 已证明自己对此不是很有用。