Tom*_*iak 23 javascript google-chrome browser-extension google-chrome-extension
我写了一个Chrome扩展程序.我的background.js文件非常大,所以我想将它拆分为较小的部分并在需要时加载指定的方法(某种延迟加载).
我用Firefox完成了这个:
// ( call for load specified lib )
var libPath = redExt.basePath + 'content/redExt/lib/' + redExt.browser + '/' + libName + '.js';
var service = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader);
service.loadSubScript("chrome://" + libPath);
// ( executing loaded file )
Run Code Online (Sandbox Code Playgroud)
是否有可能在基于Webkit的浏览器中以类似的方式执行此操作?我找到了如何将多个JS文件注入匹配页面(使用manifest.json)的解决方案,但找不到包含JS文件的方法只是为了扩展.
Omn*_*Omn 32
您还可以通过此处描述的非常简单的方式执行此操作:https: //developer.chrome.com/extensions/background_pages#manifest
{
"name": "My extension",
...
"background": {
"scripts": [
"lib/fileone.js",
"lib/filetwo.js",
"background.js"
]
},
...
}
Run Code Online (Sandbox Code Playgroud)
您不会进行延迟加载,但它确实允许您将代码分解为多个文件并指定它们加载到后台页面的顺序.
rsa*_*hez 16
如果要在后台页面的上下文中加载javascript文件并希望避免使用eval,可以只script在后台页面的DOM中添加标记.例如,如果您的文件存在于lib您的扩展程序的文件夹中,则此方法有效:
function loadScript(scriptName, callback) {
var scriptEl = document.createElement('script');
scriptEl.src = chrome.extension.getURL('lib/' + scriptName + '.js');
scriptEl.addEventListener('load', callback, false);
document.head.appendChild(scriptEl);
}
Run Code Online (Sandbox Code Playgroud)
找到了可能的解决方案。有一个 RequireJS main 方法 require 的简单实现,它使用 JavaScript 回调跟踪来查找加载主扩展文件的事件,并与扩展上下文绑定执行它。 https://github.com/salsita/browser-require/blob/master/require.js
它似乎有效,但该解决方案有一些缺点:
func.call- 调试非常困难file:///) 的脚本,因此有时它无法按预期工作| 归档时间: |
|
| 查看次数: |
23543 次 |
| 最近记录: |