ドキュメントから、フォーカスを失ったときにChrome拡張機能のポップアップを閉じることが設計上の選択であることがわかりました。
私は、ユーザーがWebページから要素を保存することを選択する拡張機能に取り組んでいます。彼がメインのWebページを操作しているときに、ポップアップを更新したいのですが、それは明らかに不可能です。
この状況を処理する適切な方法は何ですか?(これは私の最初のChrome拡張機能です)
ドキュメントから、フォーカスを失ったときにChrome拡張機能のポップアップを閉じることが設計上の選択であることがわかりました。
私は、ユーザーがWebページから要素を保存することを選択する拡張機能に取り組んでいます。彼がメインのWebページを操作しているときに、ポップアップを更新したいのですが、それは明らかに不可能です。
この状況を処理する適切な方法は何ですか?(これは私の最初のChrome拡張機能です)
コンテンツ スクリプトに「保存」アクションを検出させることができます。特定のメインにあることが確実にわかっている特定の 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}
}
});