9

ドキュメントから、フォーカスを失ったときにChrome拡張機能のポップアップを閉じることが設計上の選択であることがわかりました。

私は、ユーザーがWebページから要素を保存することを選択する拡張機能に取り組んでいます。彼がメインのWebページを操作しているときに、ポップアップを更新したいのですが、それは明らかに不可能です。

この状況を処理する適切な方法は何ですか?(これは私の最初のChrome拡張機能です)

4

2 に答える 2

6

コンテンツ スクリプトに「保存」アクションを検出させることができます。特定のメインにあることが確実にわかっている特定の DOM 要素、または自分で作成した特定の DOM 要素であるとします。

content.js

//content script
document.onreadystatechange = function () {
if (document.readyState == "complete") {
    // Grab the UI frmo the mainpage you want to append the save functionality
    var someElementsYouWantToAppendASaveButtonTo = document.getElementsByTagName("...");

    var len = someElementsYouWantToAppendASaveButtonTo.length;
    for (var i = 0; i < len; i++) { 
        // Create a UI save button to provide a functionality
        var theSaveButton = document.createElement("button");
        theSaveButton.value = "Save to Chrome Extension";

        // Send data to extension when clicked
        theSaveButton.addEventListener("click", function() {
            var dataToSentToExtension = {...} // Retrieve from the clicked element, or whatever you want to save
            chrome.extension.sendMessage(dataToSentToExtension, function(response) {
                if(response.success) console.log("Saved successfully");
                else console.log("There was an error while saving")
            });
        }, false); 

        someElementsYouWantToAppendASaveButtonTo[i].appendChild(theSaveButton)
    }
}
}

次に、バックグラウンドで応答を検出し、必要に応じてポップアップを設定します。

background.js

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    if(request.dataToSave) {
        chrome.storage.local.set(dataToSave, function() {...});

        // You can then set upn the proper popup for the next click or even switch to it
        switch(request.popupToDisplay) {
            case "awesomeDisplay":
            chrome.browserAction.setPopup({...})
            break;
        }


        var responseFromExtension = {success: true}
    } else {
        var responseFromExtension = {error: true}
    }
});
于 2013-01-04T17:07:30.437 に答える
1

popup.htmlWeb ページの変更に合わせてページを変更/更新しようとしているようです。その場合は、コンテンツ スクリプトを使用して、(毎回フォーカスが失われるため) との単一メッセージ通信の接続を確立し、間接更新します。background pagepopup.html

参考文献:

これらの間popupおよびこれらとbackground pageは別に、これらのトピックに関する多くの質問があります。

于 2013-01-04T17:04:23.840 に答える