我有一个类似下面的函数,我需要它在iframe加载后返回iframe元素(或iframe主体中的元素)。
我一直在阅读Promises和Async,但到目前为止我的JS已经过时了。任何指针/帮助表示赞赏。 TIA。
get_my_element = await get_element_inside_iframe();
console.dir(get_my_element); // await returns promise, without await returns undefined. I need the actual element instead.
async function get_element_inside_iframe() {
myiFrame = document.getElementById('myiFrame');
if (myiFrame == null) {
myiFrame = document.createElement('iframe');
myiFrame.setAttribute('id', 'myiFrame');
myiFrame.setAttribute('seamless', '');
myiFrame.setAttribute('srcdoc', '<html><head><style type="text/css">body {background:red}</style></head><body><div id="myelement">hello</div></body></html>');
document.body.appendChild(myiFrame);
myiFrame.addEventListener("load", function(){
let element_inside_iframe = myiFrame.contentWindow.document.getElementById('myelement');
return element_inside_iframe;
});
}
}
答案 0 :(得分:0)
最后根据这个解决方案:https://stackoverflow.com/a/14220323/4124433
以下代码有效:
get_element_inside_iframe().then(
function(val){
console.log("value="+val);
}).catch(function(e){
console.log('error=' + e)
});
async function get_element_inside_iframe() {
return new Promise(function(resolve, reject) {
myiFrame = document.getElementById('myiFrame');
if (myiFrame == null) {
myiFrame = document.createElement('iframe');
myiFrame.setAttribute('id', 'myiFrame');
myiFrame.setAttribute('seamless', '');
myiFrame.setAttribute('srcdoc', '<html><head><style type="text/css">body {background:red}</style></head><body><div id="myelement">hello</div></body></html>');
document.body.appendChild(myiFrame);
myiFrame.addEventListener("load", function(){
let element_inside_iframe = myiFrame.contentWindow.document.getElementById('myelement');
return resolve(element_inside_iframe);
});
}
else {
resolve(myiFrame.contentWindow.document.getElementById('myelement'))
}
});
}