2

我正在尋找一種從原始彈出頁面,從內容腳本內部發送數據(或直接編輯)DOM/HTML的方法。Chrome擴展內容腳本訪問擴展框架

chrome.tabs.executeScript(null, {file: "script.js"}); 

我正在尋找一種方式來訪問原始彈出的HTML,所以我可以編寫和更新日誌什麼的script.js動態做:我的腳本使用以下行啓動。

如果您需要更多信息,我將非常樂意編輯這篇文章。

非常感謝您的幫助!

+0

我很困惑你的問題。你能否編輯你的文章並使其更清楚?看起來你想從彈出頁面發送數據到..什麼? –

回答

1

擴展上下文與內容腳本上下文之間存在安全分離。您不能僅從內容腳本中引用彈出框的window(與擴展上下文中的getBackgroundPage()getViews()不同,這是開始的一種破解)。

兩者之間通信的正確方法是Messaging(您可以通過runtime.sendMessage從內容腳本發送消息,並且彈出窗口將在接收器之間)。

重要的是要記住popup可以關閉,然後它的狀態將會丟失並且不會被監聽。在這種情況下,您要麼使用後臺腳本作爲兩者之間的「代理」,要麼使用一些持久性存儲,如chrome.storage

最後,Messaging/Storage僅支持JSON序列化的有效載荷。這意味着除了其他事情之外,您不能發送DOM節點。您只需要傳達您的目的所需的最少數據,並在彈出窗口中構建DOM。

+0

非常感謝,我會檢查出來。我遇到了另一個問題;在啓動之前,如何將數據發送到原始窗口中的內容腳本?我希望窗口具有script.js能夠使用的配置選項。 – Ferdz

+1

[此問題](http://stackoverflow.com/q/17567624/934239)應該提供充足的答案。 – Xan

+0

除上述之外,如果配置不依賴於選項卡,請考慮將其保存在'chrome.storage'中。 – Xan