动态创建iframe的contentWindow未定义
contentWindow of a dynamically created iframe is undefined
这是有问题的javascript代码
var tmpIframe, url;
url = "http://local.custom.com:10000/simple.html";
tmpIframe = $("<iframe id='runner'></iframe>").attr('src', url);
tmpIframe.contentWindow.postMessage('do_something', data);
最后一行实际上抛出了这个错误消息:
Uncaught TypeError: Cannot read property 'postMessage' of undefined
tmpIframe
实际上作为一个列表返回。但是即使我把最后一行改成
tmpIframe[0].contentWindow.postMessage('do_something', data);
我仍然得到相同的错误信息
为什么这不是有效的代码?我是否必须将iframe附加到DOM?
有三个问题:
- 你正在混合jQuery包装器和DOM属性
- Iframes必须被附加到DOM才能被加载
- iframe不立即加载,也不同步加载
所以你可以使用vanilla-js:
var iframe = document.createElement('iframe');
iframe.onload = function() {
console.log(iframe.contentWindow);
document.body.removeChild(iframe);
};
iframe.src = url;
document.body.appendChild(iframe);
或jQuery:
$("<iframe></iframe>")
.load(function() {
console.log($(this).prop('contentWindow'));
$(this).remove();
})
.attr("src", url)
.appendTo('body');
相关文章:
- Jquery POST未填充数组
- React重新渲染但未显示正确的组件
- Javascript生成的表单未提交
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何在未直接触发的情况下停止事件
- HTML表单提交时未执行外部函数
- 画廊图像未显示
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- AngularJS:ng之后,重复$scope值未按预期更新
- 我的模板未被解析
- 尽管链接成功并已成功下载,但未找到NPM模块
- fetch() 函数未在 Ubuntu Chromium 浏览器上定义
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 对于Chrome上动态加载的iframe,未定义contentWindow
- 动态创建iframe的contentWindow未定义
- 当使用window.frames[name]访问时,iframe contentWindow未定义