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 つの新しく開いたページで同じになります。私はあなたがめまいを感じさせなかったことを願っています;)