当用户单击浏览器操作按钮时,我从后台页面注入我的内容脚本,如下所示:
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript(null, { file: "content.js" });
});
那么如何从我的内部访问 jQuerycontent.js
呢?我没有看到同时注入的方法。
当用户单击浏览器操作按钮时,我从后台页面注入我的内容脚本,如下所示:
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript(null, { file: "content.js" });
});
那么如何从我的内部访问 jQuerycontent.js
呢?我没有看到同时注入的方法。
关于什么:
chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
chrome.tabs.executeScript(null, { file: "content.js" });
});
您可以从这里下载“jquery.js”:http : //jquery.com/download/
如何将它添加到您的清单文件中
"content_scripts": [
{
"js": [
"jquery.js",
"contentscript.js"
]
}
],
更新:
就脚本顺序而言,在第一个脚本之后执行第二个脚本会更准确,result
是选项卡列表中脚本执行结果的数组。
chrome.tabs.executeScript(null, {file:'js/jquery-2.1.1.min.js'}, function(result){
chrome.tabs.executeScript(null, {file:'js/myscript.js'});
});
老的:
在您的脚本之后注入 Jquery 将能够在您的脚本中访问 Jquery。
chrome.tabs.executeScript(null, {file:'js/jquery-2.1.1.min.js'});
chrome.tabs.executeScript(null, {file:'js/myscript.js'});
你必须对如何在描述的脚本应该注入更多的控制这里。特别是allFrames
,如果你想将脚本到文档中的所有帧属性是非常重要的。忽略它只会注入顶部框架。由于其他答案中未提及它,因此您猜它对您有帮助。脚本通常可以通过添加其描述体现注入这里。
由于我有很多具有很多依赖项的脚本,因此我使用了一个带有concatenateInjection
三个参数的函数:
//id: the tab id to pass to executeScript
//ar: an array containing scripts to load ( index order corresponds to execution order)
//scrpt (opzional): the last script to execute (if not provided, than the last script is the last insert in previous array)
function concatenateInjections(id, ar, scrpt){
var i = ar.length;
var idx = 0;
function inject(idx){
idx++;
if(idx <= i){
var f = ar[idx-1];
chrome.tabs.executeScript(id, { file: f }, function() {
inject(idx);
});
}else{
if(typeof scrpt === 'undefined') return;
chrome.tabs.executeScript(id, { file: scrpt });
}
}
inject(idx);
}
和用法示例:
// id is tab id
// sources: first execute jquery, than default.js and anime.js in the end
var def = [
"lib/jquery-1.11.3.min.js",
"lib/default.js",
"injection/anime.js"
];
// run concatenate injections
concatenateInjections(id, def);
认为这可能有用。
带有 concat 和闭包的版本(更美观):
function concatenateInjections(id, ar, scrpt){
if( typeof scrpt !== 'undefined' ) ar = ar.concat([scrpt]);
var i = ar.length;
var idx = 0 ;
(function (){
var that = arguments.callee;
idx++;
if(idx <= i){
var f = ar[idx-1];
chrome.tabs.executeScript(id, { file: f }, function(){ that(idx);} );
}
})();
}
任何时候你想动态插入 jQuery,我推荐这个脚本
我个人有一个 Chrome 自定义搜索“ $
”,它替换$
为
javascript:
var jq = document.createElement('script');
jq.onload = function(){};
jq.src = "https://code.jquery.com/jquery-2.1.1.min.js";
document.querySelector('head').appendChild(jq);
javascript:
只是从 url 栏运行 javascript 的方法
about:blank
当我试图快速模拟一些 css 情况时,我在我的页面上使用它