Javascript 无法从其他服务器加载脚本-内容安全策略问题?

Javascript 无法从其他服务器加载脚本-内容安全策略问题?,javascript,html,dom,bookmarklet,Javascript,Html,Dom,Bookmarklet,我一直在尝试将bookmarklet变成一个小的开发环境,我可以使用它测试一些javascript,轻松地动态发送命令,并快速更新服务器上的代码以查看结果。使用我在这个网站和谷歌上找到的方法,这已经成功了一半,但它似乎不太管用,有时随机的也不管用。最终目标是拥有一个书签,我可以从任何页面点击它,它将加载我保存在服务器上的javascript文件。我创建了以下两个bookmarklet,以尝试实现此功能: 失败的方法1: javascript: var s = document.createEle

我一直在尝试将bookmarklet变成一个小的开发环境,我可以使用它测试一些javascript,轻松地动态发送命令,并快速更新服务器上的代码以查看结果。使用我在这个网站和谷歌上找到的方法,这已经成功了一半,但它似乎不太管用,有时随机的也不管用。最终目标是拥有一个书签,我可以从任何页面点击它,它将加载我保存在服务器上的javascript文件。我创建了以下两个bookmarklet,以尝试实现此功能:

失败的方法1:

javascript:
var s = document.createElement('script');
s.type='text/javascript';
document.body.appendChild(s);
s.src='//smewth.com/test.js';
void(0);
方法1在一行bookmarklet表单中:
javascript:var s=document.createElement('script');s、 type='text/javascript';文件。正文。附录子项;s、 src='//smewth.com/test.js';无效(0)


失败的方法2:

javascript:(
 function(){
  var imported = document.createElement('script');
  imported.type='text/javascript';
  imported.src = 'https://smewth.com/test.js';
  document.head.appendChild(imported);
})();
方法2在一行bookmarklet表单中:
javascript:(function(){var imported=document.createElement('script');imported.type='text/javascript';imported.src='1https://smewth.com/test.js“;document.head.appendChild(导入);})()

通过分解()中的kickass bookmarklet,我得到了方法1。我从他们的网站上得到的实际版本在我的浏览器上运行良好,没有问题。我甚至直接替换了他们用来加载我的URL的URL。我在这个网站上搜索时发现的第二种方法,它实际上工作了一小段时间,由于一些未知的原因(可能是不同的浏览器)停止了工作。我尝试将这个脚本对象附加到每个脚本的头部和主体上,但没有得到改进

我为这篇文章创建了test.js脚本,它包含一个简单的警报框语句:

$$ [/]# cat test.js
alert("hi");
$$ [/]# 
注意:当我使用嵌入在bookmarklet本身中的代码执行此操作时,没有将其附加到头部/身体对象,则其工作正常,如下所示:

javascript:%20alert("hi");
我确实注意到,使用这两种方法,代码实际上都被注入到页面中,但是当我单击书签时,我没有看到代码被执行。有没有人知道哪种方法是最好的或者类似的方法,这样我就可以通过我在远程服务器上更新的页面加载javascript(可靠)?也许我需要将连接到另一个对象

谢谢你的帮助

-杰夫


更新:我显示这个工作,而这个网站是加载,但它不工作,当你在一个网站,如谷歌.com。不知道区别是什么,也不知道如何适应,google.com也有一个头部和一个身体对象。我在一些网站上展示了这一点,而在一些网站上则不然。

我发现了这一点。有两种情况导致了该问题的间歇性症状。第一个问题是,托管代码的站点位于自签名证书上。我开始注意到,只有在尝试在安全站点中运行时才会出现问题。然后在Chrome中,我看到控制台出现了一个错误。如果Firefox在控制台上给我一个错误或者其他什么,那就太好了,因为这是问题的根源。我必须做的第二件事是在Firefox中禁用OCSP,因为我使用免费证书进行测试


我还必须使用如上所述的方法1。由于某种原因,Firefox和Chrome都不喜欢匿名函数调用。从现在起,我将参考Chrome在控制台中查找错误,因为Firefox已经证明自己在这方面不是很有用。

这可能是由于内容安全策略造成的,但这并不能解释为什么我可以在google.com上加载kickass bookmarklet,而无法加载我在其上制作的书签。您在控制台中是否遇到XSS错误或CSP错误浏览器如果是XSS,您可能希望使用JSONP绕过它。谢谢您的回复。我实际上没有在浏览器中显示任何错误。单击书签后,我将显示源中确实显示的标记。但由于某些原因,未对的内容进行评估。@CHBuckingham,由于您的更新,我仔细检查了其他浏览器是否存在错误,最终导致了解决方案。Firefox非常不擅长在控制台中报告此类应用程序的错误。在Chrome中,错误就在那里。