ユーザーがブラウザアクションボタンをクリックするとバックグラウンドページからコンテンツスクリプトを挿入します。
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.tabs.executeScript(null, { file: "content.js" });
});
では、どのようにしてcontent.js
内からjQueryにアクセスできますか?同時に注入する方法がわかりません。
どうですか:
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"
]
}
],
更新:
最初のスクリプトがスクリプトの順序に関してより正確になると、2番目のスクリプトを実行します。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'});
here で説明されているように、スクリプトの挿入方法をより詳細に制御できます。文書内のすべてのフレームにスクリプトを挿入する場合は、特にallFrames
プロパティが重要です。それを無視すると、トップフレームにのみ挿入されます。他の回答で言及されていないので、あなたを助けると思います。 here のように、スクリプトをマニフェストに追加することで、いつでも注入できます。
私は多くの依存関係を持つスクリプトをたくさん持っているので、3つのパラメーターを取る関数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);
それが役立つと思います。
連結とクロージャーを備えたバージョン(より美しい):
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の状況をすばやくモックアップしようとしています