2012-03-21 19 views
0

テスト拡張機能を作成していますが、項目がコンテキストメニューに表示されません。ここで何が間違っていますか?Google Chromeにコンテキストメニューアイコンが表示されない

私のマニフェストファイル

{ 
"name": "Colour", 
"version": "1.0.1", 
"description": "Colour the background on right clicking image.", 
"offline_enabled": true, 
"permissions" : [ 
"contextMenus", 
    "tabs", 
    "http://*/*", 
    "https://*/*" 
], 
"background_page":"background.html" 
} 

私background.htmlはgetColour関数への参照を渡す必要があり

function getColour(info, tab){ 
    document.body.style.background="#456"; 
} 

chrome.contextMenus.create({ 
    "type":"normal", 
    "title":"Colour page", 
    "contexts":["image"], 
    "onclick":getColour() 
}); 

答えて

3

このスクリプトが含まれています。それは、ないbe invokedください。

function getColour(info, tab){ 
    document.body.style.background="#456"; 
} 

chrome.contextMenus.create({ 
    "type": "normal", 
    "title": "Colour page", 
    "contexts": ["image"], 
    "onclick": getColour // <--- Removed() 
}); 
以前

、あなたのコードは、このように動作します:

  1. getColour()からgetColourを呼び出します。
  2. returnステートメントが関数にないため、undefinedを返します。
  3. chrome.contextMenu.create({ ... "onclick": undefined }); - イベントハンドラなし
+0

@Shikhar Sharma関数の呼び出し/呼び出し/実行とコールバックのような参照の違いを理解していても問題が解決しない場合は、それを説明して答えを書いてみてください。 – PAEz

+0

@PAEz難しいことではありません:関数名に2つのカッコが後置されていると、 'name()'のように後置されているときには、最初にそれを取得するのにかなり問題がありました(Wahaさん、ありがとうございます; 、関数は**呼び出されます**。これらを省略すると、関数への**参照が渡されます。例えば、 'name'のようになります。 –

+0

今はそれを取得しますが、実際にそれを得る前に私に3回間違えてWahaに説明してもらいました。 ...特にそれがコールバックの考えに来たとき。 – PAEz

関連する問題