我控制嵌入在另一个域的页面中的iframe的内容.我的iframe中的javascript是否有任何方法可以更改父级的DOM?
例如,我想让我的iframed脚本向父DOM添加一堆html元素.这看起来像一个很高的命令 - 想法?
编辑:存在一种称为" 片段ID消息 "的技术,它可能是跨域iframe之间进行通信的一种方式.
编辑:此外,Firefox 3.5,Opera,Chrome(等)似乎采用html5 "postMessage"api,它允许帧,iframe和弹出窗口之间的安全,跨域数据传输.它就像一个事件系统.IE8显然支持这个功能,这可能有点令人惊讶.
摘要:不,您无法直接从其他域访问/编辑页面的DOM.但是你可以与它进行交流,它可以合作进行你想要的改变.
我正在学习建立Chrome扩展,而我试图按照官方指南中的指令之一在这里.
我想要完成的是:
到现在为止还挺好!我使用以下脚本注入页面.
var injectJS = function(url, cb) {
var h = document.getElementsByTagName('head')[0],
s = document.createElement('script');
s.type = 'text/javascript';
s.src = url;
if (cb)
s.onload = cb;
h.appendChild(s);
};
injectJS(chrome.extension.getURL('script/do_something.js'));
Run Code Online (Sandbox Code Playgroud)
现在,我希望注入的脚本能够与扩展进行通信.
看起来我正在寻找的是文档中描述的内容.
https://developer.chrome.com/extensions/content_scripts.html#host-page-communication
问题是,当我尝试执行window.postMessage控制台时显示错误"DOM Exception 12".
编辑:解决了运行示例代码的第一个问题.
我得到的另一个错误,来自smae代码来自port.postMessage:
Uncaught Error: Attempting to use a disconnected port object
这是代码:
var port = chrome.runtime.connect();
// Respond to messages from the injected script to collect results
window.addEventListener('message', function(e) {
if (e.source != window)
return; …Run Code Online (Sandbox Code Playgroud)