这是我做的:
chrome.tabs.create({url:msg.url}, function(tab) {
chrome.tabs.executeScript(tab.id, {
runAt:"document_end",
allFrames:true,
code:"var ready = function(fn){ if(typeof fn!== 'function') return ; if(document.readyState === 'complete') {return fn();} if(document.readyState === 'interactive'){ return fun(); };}; ready(function() { console.log(document.querySelector('#rso h3 a')) alert('yes'); document.querySelector('#rso h3 a').click(); });"
});
});
但似乎js在隔离环境中运行,因此我无法操纵DOM,是否有任何解决方法?
我还尝试使用code
属性来包含以下代码段
document.querySelector('#rso h3 a').click();
PS:如果code
属性是,例如调用alert()
函数,那么它就会完美无缺。
答案 0 :(得分:0)
感谢@Xan和我们对该主题的讨论,使用setInterval
和clearInterval
与code
属性的组合解决了问题,如下所示:
code: "var intrvl = null; function fn(){ var a = document.querySelector('#rso h3 a'); if(a !== null){ clearInterval(intrvl); a.click(); } }; intrvl = setInterval(fn, 500);"
问题是我试图注入这个javascript的特定页面创建了我想动态操作的元素,document_end
只保证所有静态DOM都被加载,我不得不做这个解决方法。
另一种方法是在Javascript或原始MutationObserver
API中使用Mutation Libraries。