Google Chrome Extensions: How to include jQuery in programmatically injected content script?
当用户单击浏览器操作按钮时,我将从后台页面插入内容脚本,如下所示:
1 2 3 | chrome.browserAction.onClicked.addListener(function (tab) { chrome.tabs.executeScript(null, { file:"content.js" }); }); |
那么,我如何从我的
如何:
1 2 3 | chrome.tabs.executeScript(null, { file:"jquery.js" }, function() { chrome.tabs.executeScript(null, { file:"content.js" }); }); |
您可以从以下网址下载"jquery.js":http://jquery.com/download/
把这个添加到清单文件怎么样
1 2 3 4 5 6 7 8 | "content_scripts": [ { "js": [ "jquery.js", "contentscript.js" ] } ], |
更新:
执行第一个脚本之后的第二个脚本在脚本顺序上更准确,
1 2 3 | chrome.tabs.executeScript(null, {file:'js/jquery-2.1.1.min.js'}, function(result){ chrome.tabs.executeScript(null, {file:'js/myscript.js'}); }); |
旧的:
在脚本后面插入jquery将使您能够访问脚本中的jquery。
1 2 | chrome.tabs.executeScript(null, {file:'js/jquery-2.1.1.min.js'}); chrome.tabs.executeScript(null, {file:'js/myscript.js'}); |
您可以更好地控制脚本的注入方式,如本文所述。特别是,如果您希望将脚本注入文档中的所有帧,那么
因为我有很多依赖性的脚本,所以我使用了一个函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | //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); } |
使用示例:
1 2 3 4 5 6 7 8 9 10 11 | // 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); |
认为这可能有用。
更新带凹面和封口的版本(更美观):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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自定义搜索"
1 2 3 4 5 | 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); |
当我试图快速模拟一些CSS情况时,我在我的