簡體   English   中英

無法處理通過chrome.tabs創建的新標簽的DOM

[英]Cannot Manipulate DOM of new tab created via chrome.tabs

這是我所做的:

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()alert()函數的調用,則它可以正常啟動。

感謝@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中使用突變庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM