我正試圖增強我們其中一個工具的GUI,但我失敗了。用戶界面由一個包含多個iFrame的主體組成,我想從中選擇一個並稍微改變內容。Tampermonkey在iframe中獲取表格?
問題是,當使用我的選擇器frame = $("iframe[src*='/vs/virt.jsp']");
它看起來像它找不到該元素。
下面的代碼(沒有做任何事情比其他日誌):
// ==UserScript==
// @name UI Tweaks
// @version 0.2
// @description Does stuff
// @match https://*.local/vs/*
// @run-at document-end
// @grant none
// @require http://code.jquery.com/jquery-latest.js
// ==/UserScript==
console.log(window.location);
console.log("before");
console.log($());
frame = $("iframe[src*='/vs/virt.jsp']");
console.log(frame.attr("id"));
console.log("after");
當網頁上運行此我得到兩個頁面加載,它顯示的位置對象,之前和之後。但是框架對象完全是空的。
但是,在Chrome瀏覽器開發者控制檯中運行相同的事情後,頁面已加載我得到我正在尋找的元素。
我試過不同的方式來加載頁面加載後腳本等,但它仍然無法正常工作。
更新:
我說:
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
然後嘗試這樣:
waitForKeyElements (
"iframe[src*='/vs/virt.jsp']",
test()
);
function test(){
frame = $("iframe[src*='/vs/virt.jsp']");
console.log(frame.attr("id"));
}
還是一樣的結果。值得注意的是我使用Tampermonkey,但也許它是一樣的?
編輯2:
function timer() {
frame = $("iframe[src*='/vs/virt.jsp']");
console.log(frame.attr("id"));
setTimeout(timer, 1000);
}
timer();
它使輸出「不確定」,而如果我嘗試在Chrome開發者控制檯我得到的對象。這就像Tampermonkey無法訪問?
'$(「iframe [iframe [src * ='/ vs/virt.jsp']」);'這是一個錯字,對,這不是實際的代碼? –
這是一個錯字。現在糾正它。感謝您的觀察! – PatrikJ
iframe元素可能稍後創建。嘗試使用'waitForKeyElements'或'MutationObserver'。 – wOxxOm