我正在整理一些演示页面,我要展示的其中一件事涉及动态获取HTML片段以及后续处理。因此我有这样简单的jQuery代码:
$('#target').load('./content_fragment.html', function() {
$(this).doSomething();
});
我正在使用file:// URL执行所有操作,因为整个事情是我(可能)从拇指驱动器或其他东西运行的演示文稿的一部分。因此,“content_fragment.html”只是另一个本地文件,就像包含该代码的主页一样。
现在这一切都可以在Firefox或Safari中正常运行,并且其他使用相对URL在Chrome中运行良好(iframe“src”网址,图片,脚本,CSS等),但Chrome只是根本不会关注那些“.load()”请求。如果我压缩内容并将其部署到Web服务器,然后通过其“http:”URL获取,那么Chrome工作正常。如果它不起作用,我在Chrome控制台中看不到任何错误;它只是不取内容。我在Linux和XP上尝试过使用Chrome,效果相同。 (与Safari或Firefox相同的文件:// URL始终按照我的预期进行操作并加载内容。)
所以我的问题是,这种古怪只是一个Chrome怪癖,还是有一些关于XMLHttpRequests和file:// URL的内在问题?换句话说,Chrome是否正在执行正确的事情,这意味着其他浏览器已损坏?
答案 0 :(得分:12)
您可以在启动chrome时将--allow-file-access-from-files
添加到命令行以禁用此安全功能:)
这是一个错误吗?也许,也许不是,正在发生的事情是它没有将file://
视为单个域,对不同文件的请求被视为不同的域,因此被SOP rules阻止。这是Chrome / Chromium开发人员的选择,无论是正确的,都取决于我的观点。
答案 1 :(得分:1)
在Safari + Firefox中遇到同样的问题:
以下代码中的警报未运行:
$。getScript('script.js',function(){alert(“Script loaded and executed。”);})
加载外部文件而不是script.js将会运行。