我正在尝试在选项卡中打开新网站地址后按类名获取DOM元素。问题是我不知道如何让它等到页面完全加载。我尝试了闹钟,setTimeOut,setTimeDelay,但没有任何作用。
chrome.runtime.onMessage.addListener(message);
function message(msg) {
chrome.tabs.update({url: 'https://www.website.com/'});
chrome.tabs.executeScript({code:"var theBtn = document.getElementsByClassName('btn1');theBtn[0].click();"});
}
我在弹出窗口中使用chrome.runtime.sendMessage,因为我想从输入中发送网址,然后按下按钮,触发上面的代码。我简化了这个因为其他一切都有效。 (msg)只是一个网站地址
答案 0 :(得分:2)
<强>更新强>
这不起作用,因为executeScript
没有要执行的标签,因为你刚刚杀死(更新)了。您必须将其拆分为背景和内容脚本:
chrome.tabs.update
executeScript
,但这看起来很愚蠢),忘记了网址,然后又回到空闲状态也许2-3中的通信必须采用另一种方式:如果应该对此URL进行操作,则内容会询问每个页面加载的背景。
非常有趣的用例! I made a Proof of concept because it's X-mas!
<强>原始强>
未测试!两个选项:
2。在脚本中添加load
侦听器包装器:
chrome.tabs.executeScript({
code:"window.addEventListener('load', function() { var theBtn = document.getElementsByClassName('btn1');theBtn[0].click(); });"
});
这是你的代码,包含在window.addEventListener('load', function() { ... });
中。添加事件侦听器会立即执行,但仅在页面加载时才会执行代码。
1。使用executeScript
的{{1}}选项。我想你想runAt
。 See docs
实际上看起来默认(document_end
)更适合:“浏览器选择”document_end“和window.onload之后的时间”(from here)
答案 1 :(得分:0)
有三种方法可以做到这一点 1.在Manifest.json中使用run_at =“document_end”(理想的开发人员应该尽可能使用这个) 2.使用java-script或jquery使用document是ready事件 3.使用executeScript