jquery - Chrome 打包应用程序无法与 jquery 和 jquery mobile 配合使用

标签 jquery google-chrome-app

使用 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:”。

一种解决方案可能是沙箱(在 list 中添加 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 错误。

查看以下网址,其中包含有关如何处理跨源请求的文档:http://developer.chrome.com/apps/app_external.html#cross-origin

关于jquery - Chrome 打包应用程序无法与 jquery 和 jquery mobile 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19365017/

相关文章:

javascript - 当不存在类型 ="submit"元素时,表单不会在 ENTER 上提交

jquery - 在 jQuery sortable() 之后调用自定义函数;

javascript - 如果 margin left == 百分比

javascript - 如何覆盖 Chrome 应用程序中的文件?

javascript - 谷歌打包应用原生消息

dart - DART lang上的通知-Chrome打包的应用

google-chrome - 套接字 API : not allowed in packaged apps?

jQuery 返回假;打破复选框

php - 将 PHP 文件中的内容输入到 HTML 文件内的 DIV 中

google-chrome-app - 我可以控制 Chrome 应用通知的持续时间吗?