RequireJS,谁用谁知道。
在浏览器环境下使用requireJS
,其加载js文件的方式,采用的是通过创建script
节点,及设置其src
属性来实现。但在chrome extensions中,这项做法被认为是不安全的,而被默认禁止,这样就导致了RequireJS
无法生效。
要想解决这个问题,有两个方案。
方案一:使用cajon替代requirejs
1. 关于cajon的简介
cajon的工作原理:基于RequireJS
,而重写了requirejs.load
方法。重写的requirejs.load
方法,默认判断逻辑,依赖相同网站的js文件,则通过异步XHR
请求方式获取,并通过eval
方法使之生效。如果依赖的是其他网站js文件,则仍用原来加载方式(生成一个script
标签)进行加载。
cajon还支持自定义哪种规则的依赖文件,需要采用XHR+eval
方式加载。
2. 具体解决方案
直接将原来require.js
文件替换为cajon.js
文件。
示例:
原来使用requirejs
的代码:
<script data-main="js/main" src="js/require/require.js" type="text/javascript"></script>
使用cajon.js
替换为:
<script data-main="js/main" src="js/require/cajon.js" type="text/javascript"></script>
Ok了,是不是很简单?!
方案二:设置content security policy参数
1. 关于content security policy的简介
这个,可以看看我的另外一篇博文,原文见:www.blogways.net。
2. 具体解决方案
在manifest.json
文件中添加如下代码:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
是的,这样就搞定了!这里,关键参数是unsafe-eval
。
试试吧!