0

私の拡張機能は、ユーザーのオプションを使用して、メインの拡張コンテキスト メニュー エントリの下にサブメニューを作成する必要があります。オプションはテーブルに格納され、各行はサブメニューを定義しています。テーブル全体はchrome.local.storage、キーを持つjson 文字列として格納されますjsondata

マニフェストは次のとおりです。

   "background": {
  "persistent": true,
  "scripts": [ "js/storage.js", "js/backgroundlib.js", "js/background.js" ]
},
...
"permissions": [ "storage", "contextMenus", "http://*/*", "https://*/*",   "tabs", "clipboardRead", "clipboardWrite" ],
...

バックグラウンド スクリプトでは、次を使用してデータを取得しようとしています。

window.addEventListener('load', function () {
var key = 'jsondata';

 storage.area.get(key, function (items){ 
     console.log(items[key]);
     build_submenu(items[key]);}); 
 }); 

function build_submenu(json) {
     console.log("build_submenu: " + json);
 }

次に、build_submenu複数を呼び出しchrome.contextMenus.create({... })てサブメニューを追加する必要があります。今のところ、呼ばれませんbuild_submenu。不可能なことをしようとしているのですか、それとも明らかな何かを見逃しているだけですか?

ありがとう。

4

3 に答える 3

0

に置き換えstorage.area.getますchrome.storage.local.get

別の提案はwindow.onload、バックグラウンド スクリプトを使用していてwindow.onload意味がないため、外側のリスナーを削除することです。

于 2016-04-07T02:04:07.983 に答える
0

いくつかの進歩がありました: background.js で、ストレージ内の json 文字列にアクセスします

var key = 'jsondata';
var data;
storage.area.get(key, function (items){ get_jsondata(items[key]);}); 

コールバック関数は、メニュー エントリとそのサブメニューを作成します。

function get_jsondata(value){
  console.log("get_jsondata " + value);
  data = JSON.parse(value);
var fcb =[ {fcb_context: "fcb_copy", title:"Copy filtered", context: ["selection", "link"]}, {fcb_context:"fcb_paste", context:["editable"], title:"Paste filtered"}];
 for (var i=0; i<fcb.length; i++) {
     var menu = fcb[i];
    chrome.contextMenus.create({
    title: menu.title,
    id: menu.fcb_context,
    contexts: menu.context,
    });
    var last = data.length;
    for (var j=0; j<last; j++){
        chrome.contextMenus.create({ 
          title: data[j].name, 
          contexts: menu.context, 
          parentId: menu.fcb_context,
          onclick:  function(info, tab){ run_cmd( data[j].regex, info, menu.fcb_context ); }
        });
    }// for j
  } // for i
}//get_jsondata

function run_cmd(regex, info, fcb_context){
    var sel = info.selectionText;
    console.log("run_cmd regex " + regex + " sel " + (sel ? sel : ""));
}

サブメニューの 1 つをクリックすると、データが最上位の変数として定義されているにもかかわらず、未定義のように見えるという問題が発生しました。

「未定義のプロパティ正規表現を読み取ることができません」というエラー メッセージを受け取りました。

于 2016-04-07T12:07:30.440 に答える