[英]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和我們對該主題的討論,通過將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中使用突變庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.