在Chrome扩展中加载外部javascript
Loading external javascript in a Chrome Extension
我正在尝试在Chrome扩展中加载一些外部javascript代码。然而,由于扩展的沙盒环境,我看不到任何由外部代码定义的函数。
外部代码实现了一种依赖机制,一个javascript文件可能需要另一个,依此类推。它还查看用于加载javascript的URL的参数,以确定要加载的顶级javascript文件。因此,它基本上可以加载任何任意的web应用程序,并且不知道将要使用的所有文件。所以我不能在扩展中使用任何静态定义。
还有一个问题是,由于所有的扩展代码都是沙盒的,所以我无法完全访问文档——例如,它无法访问窗口变量。
但是,如果我把所有的代码都放在外部代码中,如果一个脚本试图加载另一个脚本,我就会遇到内容安全问题。我之所以去做扩展,是因为现存的每一个浏览器都严重错误地实现了CSP,bookmarklet无法访问外部资源。
绕过扩展沙盒或绕过扩展沙箱工作的最佳实践是什么,以便基本上能够像页面本身加载了代码一样运行代码,而不会出现任何CSP问题?
在内容脚本中,您可以执行以下操作来加载js文件
function inject(url, exteral) {
// 1. Build the absolute URL
// 2. Create a script tag and set src attribute
// 3. Append script tag to thw window
if (!external){
url = chrome.extension.getURL(url);
}
var scriptElement = document.createElement('script');
scriptElement.src = url;
(document.body || document.head || document.documentElement).appendChild(scriptElement);
}
如果js文件是用扩展名打包的,那么它必须放在web_acceptable_resources下的manifest.json
。但是,它需要具有与它在(http | https)
中注入的页面相同的协议
由于不允许内容脚本调用窗口函数,因此可以调用window.postMessage将数据从实际窗口发送到内容脚本。
相关文章:
- 使用html中的外部javascript进行数据验证
- 将变量传递给外部Javascript
- 关于引入外部javascript文件的问题&css通过https
- 有没有办法在tinymceiframe中加载一个外部javascript文件
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- HTML外部javascript加载另一个javascript
- 如何在定义js文件后为外部javascript文件设置变量
- ResolveUrl没有'我似乎不适合当链接到具有动态虚拟目录的外部javascript文件时
- 如何在小部件中添加外部javascript库和样式表
- 外部JavaScript验证不起作用
- Chrome扩展无法通过清单加载外部javascript
- 动态虚拟目录和外部 JavaScript 链接
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- 如何从窗体调用外部javascript方法
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- 如何使用Java在WebDriver中调用外部JavaScript
- 从Haml调用外部javascript中的ruby数组
- 在选择更改时更改从外部javascript生成的flash播放器
- 缓存javascript失败,因为使用了外部javascript
- 在AngularJS中手动加载和卸载外部javascript