7

私は、ブラウザを開いたときに "オフ"アイコンが表示され、スクリプトが実行されないように、スクリプトをいつ実行するかをユーザーに決定させたいと思っています。ユーザーがクリックすると、「オン」アイコンに変わり、ユーザーがクリックするまでユーザースクリプトを実行します。私は、それぞれ32x32の2つのPNGアイコンを持っています:on.pngoff.pngクロム拡張機能のオン/オフボタン/アイコンを作成する方法は?

私の二つの質問:

  1. 私はoff.pngにデフォルトのアイコンを設定できますか?

    ... 
    "browser_action": { 
        "default_icon": { 
         "32": "off.png" 
         }, 
        "default_title": "icon" 
    }, 
    "icons": { 
        "32": "on.png", 
        "32": "off.png" 
    }, 
    "background": { 
        "scripts": ["background.js"] 
    }, 
    "content_scripts": [{ 
        "js": ["SCRIPT.user.js"] 
    ... 
    
  2. は、ここで私は一時的にしようとする迅速な機能を作った私のbackground.jsを、だ:私は私のmanifest.jsonでこれを試みたが、それは、アイコンを設定しなかった、代わりにパズルのピース(私はデフォルトを推定)を示しましたそして、(私はフォルダの筐体に「負荷アンパック拡張子」での私のスクリプト、アイコンとマニフェストをロードし、ビューを検査」を選択したときにことを言及する必要がありますonClicked

    var status = 0; 
    
    function toggle() { 
    if (status == 0){ 
        chrome.browserAction.setIcon({path: "on.png", tabId:tab.id}); // so it's set for the tab user is in 
        chrome.tabs.executeScript(tab.id, file:"SCRIPT.user.js"); //execute for this tab 
        status++; 
    } 
    if (status == 1){ 
        chrome.browserAction.setIcon({path: "off.png", tabId:tab.id}); 
        chrome.tabs.executeScript(tab.id, code:"alert()"); // execute nothing when off 
        status++; 
    } 
    if (status > 1) 
        status = 0; // toggle 
    } 
    
    chrome.browserAction.onClicked.addListener(function(tab) { 
        toggle(); 
    }); 
    

に基づいてオン/オフを切り替えます〜にすぐに何か問題があるのか​​どうかを確認、私はそれが参照しているものを知りませんが、私は)、background.jsでUncaught SyntaxError: Unexpected token :を見ると、スクリプトの中で私のuserscriptを表示していないようですので、

をフォルダ、任意のアイデア、助け?

答えて

8

大丈夫ですので、マニフェストと背景ページを少し変更してみましょう。デフォルトoff.pngようになります

manifest.jsonを

"browser_action": { 
    "default_icon": "off.png", 
    "default_title": "icon" 
}, 

。アイコンセクションについては、docsを読んで、それが何のために使用されているかを見てください。しかし、今のところ完全に削除してください。また、あなたのcontentScriptsセクションにあるものを削除してください。プログラムで注入する場合は、マニフェストにリストする必要はありません。

次のあなたの背景ページにいくつかの変更、それはもう少しきれいにする:

background.js

var toggle = false; 
chrome.browserAction.onClicked.addListener(function(tab) { 
    toggle = !toggle; 
    if(toggle){ 
    chrome.browserAction.setIcon({path: "on.png", tabId:tab.id}); 
    chrome.tabs.executeScript(tab.id, {file:"SCRIPT.user.js"}); 
    } 
    else{ 
    chrome.browserAction.setIcon({path: "off.png", tabId:tab.id}); 
    chrome.tabs.executeScript(tab.id, {code:"alert()"}); 
    } 
}); 
+1

私はそれを見たとき、私はちょうど前にあなたのコードをコピーし、ていたが@tempcodeもう一度、 'executeScript'の' code'と 'file'部分を囲んでいる' {} 'を見逃してしまって、それらを追加して、エラーがなくなったかどうかを確認します。 – BeardFist

+0

それは、ハードルが飛び込んだ、私たちはほとんどそこにいる。この修正により私はオフからオンに切り替えることができました(私の最初のテストでは、 "拡張マニフェストはこのホストへのアクセス権を要求しなければなりません" - 私が持っていた 'manifest'の' content-scripts'セクションを削除するよう提案したので'matches'と' excludes'、私はそのエラーを修正するために 'permissions'を追加しました)*、しかし最後に小さな問題が1つあります:" on "をクリックすると、それをオフにすることはできません。 "ページがリロードされるまで(少なくとも私たちは一意の' tab.id'が動作することを知っています)。しかしそれを除けば、残りは機能しているようです。これまでのご協力ありがとうございます! – tempcode

+1

@tempcode問題は、 'status'は何らかのキーワードなので、ステータスはすでに文字列であると定義されているので、' var status = false'は 'false'を割り当てず' false ' 。変数名を 'toggle'のように変更してください。 – BeardFist

関連する問題