我目前正在使用:
function printThing(){
let link = parent.document.getElementById("oLink").href;
console.log(link);
}
if (window.attachEvent) {window.attachEvent("onload", printThing);}
else if (window.addEventListener) {window.addEventListener("load", printThing, false);}
else {document.addEventListener("load", printThing, false);}
要从iframe的内容(使用srcdoc而不是src)获取链接,然后在控制台中进行打印。将此代码发送到前端之前,将添加到一些存储的html中。
加载iframe内容后,是否有办法触发此操作(即,无需等待应用程序中的其他内容)?我想用替换所有的东西window
,document
但它不起作用(它什么也不做)。
我需要从iframe内部访问元素并更改其属性。
的HTML
onload
一旦加载了框架的内容,此方法仅使用属性来调用函数。
<iframe id="some_frame" onload="on_iframe_load(this)">
....
</iframe>
显然,请确保该on_iframe_load(_this)
功能在您的JS代码中。为了进一步解释为什么我们通过this
到on_iframe_load()
,了解到通过this
从一个DOM元素将通过参考元素。
<script>
var on_iframe_load(_this) = () => {
_this.contentDocument.getElementById("something_in_this_frame").doWhatever(...);
}
</script>
纯JS
如果HTML
没有使您的船浮起,则可以使用onload
或addEventListener("load", ...)
,然后iframe
使用元素指针和contentDocument
(没有IE?)来访问内部的元素。
<script>
document.getElementById("some_frame").onload = function() { // or you could use `addEventListener("load", function(){...})`
this.contentDocument.getElementById("some_element_in_frame").doThing(...)
}
</script>
这样我就可以
this
用来访问iframe中的元素了吗?是的,但是一定要参考
contentDocument
。我不知道这是否适用于IE。我知道它在Chrome中该代码有效。我只需要检查它是否满足我的要求(这可能需要一些时间)。别担心,我永远不会忘记勾选答案(我从您的答案中学到了新东西后就投票了)。另外,我想知道是否有可能从iframe内部的主体中调用该函数并将引用传递给iframe。就像是
<body onload="func(this.parent)">