1

「変換ボタン」(ラベル: 変換) をクリックすると Web ページのコンテンツを他の言語に変換する mozilla 拡張機能を作成しています。そのラベルは英語に変換され、そのボタン (ラベル: 英語) をクリックするとコンテンツが元の形に変換されます

ここに画像の説明を入力

ここに画像の説明を入力

各タブに属性「changedcontent」を設定して、イベントフォーカス時にフォーカスされたタブが「changedcontent」属性を読み取り、ボタンにラベルを設定しようとしました(「変換」または「英語」)

複数のタブを切り替える必要がある場合に問題が発生します。別のタブのプラグインは、変更されたコンテンツを表示しているか (ボタン ラベルを表示する必要がありますか) または元の形式 (ボタン ラベルを表示する必要があります) に応じて異なる状態を維持する必要があります: "変換")

そのため、更新ボタンをクリックするか、Webページの他のリンクをクリックすると。ページのコンテンツが変換された「英語」のボタンのラベルは「変換」に変更する必要があるため、ページの更新またはリンクのクリックを追跡するためにページのアンロード イベントを処理しましたが、Web ページには複数のフレーム/iframe が含まれている可能性があるため、これはイベントが複数回呼び出されています。その間にタブを切り替えると、他のタブのラベルが「英語」から「変換」に変換されます

アンロード イベントのコードは次のとおりです。

window.addEventListener('unload', unloadingDocument, true);
function unloadingDocument()
{

    var currentTab = gBrowser.selectedTab;
    currentTab.setAttribute("changedcontent" , "false");//set the transliterated attribute back to false
    var convertButton = document.getElementById("convert_button");
    convertButton.setAttribute("label","Convert");
}

この問題を解決し、複数のタブ間で mozilla プラグインのさまざまな状態を維持する方法を提案してください。

ありがとう

4

1 に答える 1

1

セッション ストア APIを使用して、タブ間で独立した状態にすることができます。

- 編集:

したがって、特定のタブが「翻訳済みかどうか」を知る方法が既にある場合、別のタブが選択されたときにボタンを正しい状態に変更したい場合は、tabSelect イベントを確認することをお勧めします:タブの検出選択 このイベントでは、タブ属性をチェックして、ボタンのラベル/動作を変更する必要があるかどうかを確認します。

-- 編集 2 :

「変換」ボタンをクリックして処理を行い、changedcontentそのタブの属性を に設定した場合true。次にload/unload listener、状態を に戻すために、更新を確認する必要がありますfalse。次に、タブを変更すると、タブtabSelectを変更するたびにボタンを変更するイベントが発生します。

changedcontentに変更するときにこのリスナーを追加すると、 true. 次に、イベントbeforeunloadが最初に呼び出されたときに、 is かどうかを確認changedcontenttrue、に変更してfalseリスナーを削除します。

于 2013-07-15T08:11:42.567 に答える