我有一个包含以下文件的文件夹:
index.html 是包含我的布局的主页面,其中包含iframe
src="screens.html"
。但是,如果我想从 index.html (已将 code.js 文件添加到 screens.html } postMessage()
进行操作strong>(它添加了 screens-code.js )我不能用相对路径做到这一点。我这样做(在主页' s代码.js文件中):
var frame = document.getElementById('innerScreen').contentWindow; // #innerScreen is iframe's ID
var hello = 'Message from screens.html file';
frame.postMessage(hello, frame.url); // or instead of <frame.url> i tried using just <screens.html> as relative path to HTML file
我收到错误:
未捕获的SyntaxError:无法执行&#39; postMessage&#39; on&#39; Window&#39;:目标来源无效&#39;&#39;致电&#39; postMessage&#39;
发生了什么?我将所有文件放在同一个文件夹中,我不是通过服务器运行它(XAMPP的种类)。没有服务器它没有用吗?
在 screens-code.js 中我只有这个:
window.addEventListener('message', function(event)
{
console.log('Success?');
}
但除了上述错误之外没有任何事情发生。
-------------------------------------------- -------------------------------
样本 http://plnkr.co/edit/q9Whqt0RfA90UwxQkFDv?p=preview
所以,在控制台中是一个错误 未捕获的TypeError:无法读取属性&#39; contentWindow&#39;为null
[编辑]
这样做有效,因此添加等待iframe加载的EventListener
:
frame.addEventListener('load', function()
{
iframe.postMessage('some testing message', '*');
});