使用 jQuery 1.10.2 和 jQuery Mobile 1.3.2 我尝试使用以下简单的 html 创建一个 chrome 打包应用程序...
<!DOCTYPE html>
<html>
<body>
<div data-role="page">
<script async src="events.js" type="text/javascript"></script>
</div>
</body>
</html>
有两个问题。首先,jQuery 将拦截加载 events.js 的脚本标签并调用 xhr.open( s.type, s.url, s.async );然而 s.async 是假的。 Chrome 打包应用程序不允许同步加载。所以在 jQuery 中的这一行之前我设置了 s.async = true;
下一个问题是 jquery 将在第一个文档插入时在每个脚本上调用其 globalEval 方法,并且这会调用 eval ,这会在 chrome 打包应用程序中产生此 CSP 错误:
未捕获的 EvalError:拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本源:“default-src 'self' chrome-extension-resource:”。
一种解决方案可能是沙箱(在清单中添加 html 页面),但这会导致另一个问题:
XMLHttpRequest 无法加载 chrome-extension://ocnbknafegfhcgbiciegbfndjckamkoj/events.html。 Access-Control-Allow-Origin 不允许 Origin null。
服务器有“Access-Control-Allow-Origin”,“*”,所以我不会想到这个错误。
那么,第一个同步错误是 jquery 问题吗?
第二个问题也是jquery/chrome打包的应用程序不匹配吗?
CSP 有解决方法吗?
有没有一种方法可以沙箱但允许在页面之间导航?
正如您所提到的,由于内容安全策略 (CSP),您无法在 Chrome 打包应用中使用 globalEval。您也不能使用行内脚本标记,因为 CSP 也认为这存在安全风险。
通过对非 CSP 投诉的 HTML 和 JS 进行沙箱处理,您的做法是正确的,但是为了发出 XHR 请求,您需要使用窗口之间的消息传递服务来消除 Origin 错误。
查看以下 url,其中包含有关如何处理跨源请求的文档:http://developer.chrome.com/apps/app_external.html#cross-origin http://developer.chrome.com/apps/app_external.html#cross-origin
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)