无法操纵通过chrome.tabs创建的新选项卡的DOM

时间:2016-07-24 04:41:58

标签: javascript google-chrome dom google-chrome-extension

这是我做的:

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()函数,那么它就会完美无缺。

1 个答案:

答案 0 :(得分:0)

感谢@Xan和我们对该主题的讨论,使用setIntervalclearIntervalcode属性的组合解决了问题,如下所示:

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。