通过“file://”内容中的“ajax”访问相对URL
我正在整理一些演示页面,我要展示的其中一件事涉及动态获取HTML片段以及后续处理。 因此我有这样简单的jQuery代码:
$('#target').load('./content_fragment.html', function() { $(this).doSomething(); });
我正在从file:// URL做这一切,因为整个事情是我(可能)从拇指驱动器或其他东西运行的演示文稿的一部分。 因此,“content_fragment.html”只是另一个本地文件,就像包含该代码的主页一样。
现在这一切在Firefox或Safari中运行得很好,相对URL的其他用途在Chrome中运行良好(iframe“src”URL,图像,脚本,CSS等),但Chrome只是不会关注那些“.load ()“请求”。 如果我压缩内容并将其部署到Web服务器,然后通过其“http:”URL获取,那么Chrome工作正常。 如果它不起作用,我在Chrome控制台中看不到任何错误; 它只是不取内容。 我在Linux和XP上尝试过Chrome,结果相同。 (和Safari或Firefox到同一个文件:// URL总是做我期望的并加载内容。)
所以我的问题是,这种古怪只是一个Chrome怪癖,还是有一些关于XMLHttpRequests和file:// URL的内在问题? 换句话说,Chrome是做正确的事情,意味着其他浏览器坏了吗?
您可以在启动chrome时将--allow-file-access-from-files
到命令行以禁用此安全function:)
这是一个错误吗? 也许,也许不是,正在发生的事情是它没有将file://
视为单个域,对不同文件的请求被视为不同的域,因此被SOP规则阻止。 这是Chrome / Chromium开发人员的选择,无论是正确的选择取决于我的观点。
在Google代码的Chrome问题部分中有很多关于此问题的讨论,您可以在此处和此处找到感兴趣的讨论。
在Safari + Firefox中遇到同样的问题:
以下代码中的警报不会运行:
$ .getScript(’script.js’,function(){alert(“Script loaded and executed。”);})
加载外部文件而不是script.js将运行。
- 使用触摸屏在Windows 8上检测Chrome中的触摸事件
- 在Chrome的Ominbox上按下Enter键时会激活Keyup事件侦听器
- localStorage事件侦听器不会在Chrome中为本地文件触发
- jQuery CSS渲染 – 适用于Firefox,而不适用于Chrome
- JQuery Autocomplete在Chrome中工作但在android中没有使用phonegap
- Webkit 的解决方法javascript选择焦点错误(在字段之间使用选项卡时)
- 无法弄清楚为什么Chrome / Safari无法在这里获得ScrollHeight
- 获取浏览器窗口宽度,包括滚动条
- 在Chrome中淡化大图像