【发布时间】:2016-01-13 20:13:40
【问题描述】:
我正在尝试增强我们其中一种工具的 GUI,但我失败了。 UI 由一个带有多个 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']");这是问题中的错字,对吧,这不是实际代码? -
这是一个错字。现在纠正它。感谢您的观察!
-
iframe 元素可能是稍后创建的。尝试使用
waitForKeyElements或MutationObserver。 -
会做并报告
-
试过 waitForKeyElements。 MutationObserver 看起来超过了我的技能等级。 :)
标签: javascript jquery google-chrome iframe tampermonkey