RequireJS,谁用谁知道。

在浏览器环境下使用requireJS,其加载js文件的方式,采用的是通过创建script节点,及设置其src属性来实现。但在chrome extensions中,这项做法被认为是不安全的,而被默认禁止,这样就导致了RequireJS无法生效。

要想解决这个问题,有两个方案。

方案一:使用cajon替代requirejs

1. 关于cajon的简介

cajonRequireJS是相同的作者.

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

试试吧!