Google Chrome扩展程序:如何在以编程方式注入的内容脚本中包含jQuery?

时间:2011-01-15 05:06:26

标签: javascript jquery google-chrome-extension

当用户点击浏览器操作按钮时,我正在从后台页面中注入内容脚本,如下所示:

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.tabs.executeScript(null, { file: "content.js" });
});

那么如何从content.js内部访问jQuery?我没有看到同时注入的方法。

5 个答案:

答案 0 :(得分:79)

怎么样:

chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
    chrome.tabs.executeScript(null, { file: "content.js" });
});

您可以从这里下载“jquery.js”:http://jquery.com/download/

答案 1 :(得分:15)

如何将此项添加到您的清单文件

"content_scripts": [
    {
        "js": [
                "jquery.js", 
                "contentscript.js"
            ]
    }
],

答案 2 :(得分:4)

更新:

在第一个脚本在脚本顺序方面更准确之后执行第二个脚本,chrome.tabs.executeScript(null, {file:'js/jquery-2.1.1.min.js'}, function(result){ chrome.tabs.executeScript(null, {file:'js/myscript.js'}); }); 是在标签列表中执行脚本的结果数组。

chrome.tabs.executeScript(null, {file:'js/jquery-2.1.1.min.js'});
chrome.tabs.executeScript(null, {file:'js/myscript.js'});

OLD:

注入Jquery后跟脚本将能够在脚本中访问Jquery。

allFrames

here中所述,您可以更好地控制脚本的注入方式。如果您希望将脚本注入文档中的所有帧,则特别{{1}}属性非常重要。忽略它只会注入顶部框架。因为在其他答案中没有提到猜测它会帮助你。脚本可以通过将其添加到清单来注入here

答案 3 :(得分:3)

由于我有很多具有许多依赖关系的脚本,我使用了一个带有三个参数的函数{ "raw": "TUlNRS1WZXJzaW9uOiAxLjANClJlY2VpdmVkOiBieSAxMC4yOC45OS4xOTYgd2l0aCBIVFRQOyBGcmksIDE4IFNlcCAyMDE1IDEzOjIzOjAxIC0wNzAwIChQRFQpDQpEYXRlOiBGcmksIDE4IFNlcCAyMDE1IDIyOjIzOjAxICswMjAwDQpEZWxpdmVyZWQtVG86IGVtdGhvbGluQGdtYWlsLmNvbQ0KTWVzc2FnZS1JRDogPENBRHNaTFJ5eGk2UGt0MHZnUS1iZHd1N2FNLWNHRmZKcEwrRHYyb3ZKOGp4SGN4VWhfQUBtYWlsLmdtYWlsLmNvbT4NClN1YmplY3Q6IFdoYXQgZGENCkZyb206IEVtaWwgVGhvbGluIDxlbXRob2xpbkBnbWFpbC5jb20-DQpUbzogRW1pbCBUaG9saW4gPGVtdGhvbGluQGdtYWlsLmNvbT4NCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0wMDFhMTE0NjhmMTY1YzUwNDUwNTIwMGI0YzYxDQoNCi0tMDAxYTExNDY4ZjE2NWM1MDQ1MDUyMDBiNGM2MQ0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04DQoNCmhlY2s_IE5vIGF0dGFjaG1lbnQ_DQoNCi0tMDAxYTExNDY4ZjE2NWM1MDQ1MDUyMDBiNGM2MQ0KQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgNCg0KPGRpdiBkaXI9Imx0ciI-aGVjaz8gTm8gYXR0YWNobWVudD88L2Rpdj4NCg0KLS0wMDFhMTE0NjhmMTY1YzUwNDUwNTIwMGI0YzYxLS0=" }

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);
}

认为这可能有用。

更新

带有concat和闭合的版本(更美观):

// 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);

答案 4 :(得分:1)

任何时候你想动态插入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:只是从网址栏运行javascript的方式

当我试图快速模拟某些css情况时,我在我的about:blank页面上使用此内容