2016-08-31 8 views
0

Opera用の簡単な拡張機能を作成しようとしています。 Chromeの場合と同様に、画像を右クリックすると「Google検索用画像」が追加されます。同様の拡張機能は既に存在しますが、これは学習のためです。Operaのコンテキストメニュー拡張内の関数(イベント)

私の最初の試みはonClickを使用しましたが、これは正しい方法ではありません。私はthis answerを使ってbg.jsファイルを書き換えました。それは次のようになります。

chrome.runtime.onInstalled.addListener(function() { 
    chrome.contextMenus.create({ 
     title: "Search Google for image", 
     id: "gsearch", 
     contexts: ["image"] 
    }); 
}); 

chrome.contextMenus.onClicked.addListener(function(info, tab) { 
    if (info.menuItemId === "gsearch") { 
     function(event) { 
      chrome.tabs.create({ 
       url: "https://www.google.com/searchbyimage?image_url=" + encodeURIComponent(event.srcUrl); 
      }); 
     } 
    } 
}); 

私は拡張をロードすると、Operaはfunction(event) {は、エラーメッセージUnexpected token (を引き起こしライン11について不平を言います。私は明らかに構文に関して何かが見当たりませんここにあなたの専門知識を感謝します。

+1

if-blocks内の関数宣言はES5では無効で、あなたの名前には名前がなくても(無効の2倍になります)。その機能は何をすべきか?もうやめろ。 – Bergi

+0

ありがとうございます。この関数がなければ、 'event'を' encodeURIComponent'にどのように渡しますか? – n49o7

+0

「イベント」とは何かとは何ですか? 'info'と同じではありませんか? – Bergi

答えて

0

ifブロック内で関数を宣言することはできません。さらにinfoencodeURIComponentに渡すことができます。次のコードが動作します:

chrome.runtime.onInstalled.addListener(function() { 
    chrome.contextMenus.create({ 
     title: "Search Google for image", 
     id: "gsearch", 
     contexts: ["image"] 
    }); 
}); 
chrome.contextMenus.onClicked.addListener(function(info, tab) { 
    if (info.menuItemId === "gsearch") { 
     chrome.tabs.create({ 
      url: "https://www.google.com/searchbyimage?image_url=" + encodeURIComponent(info.srcUrl) 
     }); 
    } 
}); 

ありがとうBergi。

関連する問題