我的chrome扩展程序有问题,扩展程序从页面读取对象,并在popup.js中显示其内容。
要读取对象,弹出窗口将执行injects.js,然后依次注入script.js。
所以发生的是,当inject.js完成执行时,将调用popup.js回调并renderData(mydata)
被执行。我不希望在完全执行script.js之前发生这种情况
Popup.js
chrome.tabs.executeScript(null, { file: "inject.js" }, function() {
renderData(mydata);
});
inject.js
var s = document.createElement("script");
s.src = chrome.runtime.getURL("script.js");
(document.head || document.documentElement).appendChild(s);
script.js
var data = {
type: "FROM_PAGE",
text: JSON.stringify(WIO.sessionInfo.context)
};
window.postMessage(data, "*");
答案 0 :(得分:1)
问题在于,executeScript返回最后一个同步求值的表达式作为回调的参数,但是带有script
的{{1}}异步运行。顺便说一句,您忘记了指定参数。
使用src
和文字代码来同步运行脚本并发送DOM消息,该消息也是同步的,然后将结果保留在最后一个表达式中:
popup.js
textContent
inject.js
chrome.tabs.executeScript(null, { file: "inject.js" }, ([mydata]) => {
renderData(mydata);
});
或者,您可以使用extension messaging将数据发送到弹出窗口(example)。