0

1 と 2 の 2 つのボタンを表示する Firefox 拡張機能を作成しようとしています。button1 を押して、現在開いているページのアドレスである var path の値を取得すると、新しいタブが開いてアクティブになります。このタブには、var パス (最初のタブのこのアドレス) の値 (innerHTML) を入れることができる button2 があります。そして今問題: button1 は関数 open() を使用し、button2 は save() を使用しますが、最初の関数の var は kuku.save() に存在しません

これは私のコードです:

function openTab() {
  //Save an address of current page
  path=content.location.href;
  //Open new Tab and select it
  var tab=gBrowser.addTab("http://www.google.com");
  var newTabBrowser = gBrowser.getBrowserForTab(tab);
  gBrowser.selectedTab=tab;
}

function write() {
  content.body.innerHTML=path;
}

関数openTab()と同じように、適切なボタンが押されたときに関数が実行されwrite()ます。問題は、このアドレスを var に保存する方法です。最初の関数から実行する場合、ボタンからの関数にはこの var がないためです。この後、私はこのコードを試します:

var path = null;
function openTab() {
  //Save an address of current page
  path=content.location.href;
  //Open new Tab and select it
  var tab=gBrowser.addTab("chrome://intabeditor/content/editor.html");
  var newTabBrowser = gBrowser.getBrowserForTab(tab);
  gBrowser.selectedTab=tab;
}

function write() {
    if (path!=null)
    content.body.innerHTML=path;
}

しかし、このコードでも悪いです。問題はパスがローカル変数であるためだと思ったので、「よりグローバルな」変数を使用しようとしました:

var kuku = {};
 kuku.path = "";

 kuku.open = function () {
  kuku.path = content.location.href;
  //The rest of the code here
};


 kuku.save = function () {
  content.body.innerHTML=kuku.path;
};

この例では、button1 は kuku.open()、button2 は kuku.save() を使用しています。

ブラウザごとに1つのタブでのみ機能します。つまり、ユーザーがページ A でボタン 1 を押し、ページ B でボタン 1 を押すと、この 2 つの新しく開かれたページには同じ値の var パスが含まれます。他のサイトでボタンを押すと、パスの最後の値が上書きされます。例: 2 つのタブ (google.com と facebook.com) を開いて、ゴーグルから button1 を押すと、新しいタブが開き、kuku.path の値は google アドレスになります。しかし次に、facebook でボタン 1 を押すと、値が facebook アドレスに変わり、この 2 つの新しく開いたページで同じになります。私はあなたがめまいを感じさせなかったことを願っています;)

4

1 に答える 1

0

ウィンドウ間でデータを共有する方法はたくさんありますが、最も簡単な方法は、fuel アプリケーション オブジェクトを使用することです。

あなたの問題に当てはまる別の方法は、setUserData / getUserDataメソッドを使用することです。

于 2009-08-21T14:33:26.287 に答える