原因:
有时候需要使用iframe 标签嵌套一个原始的html来显示页面,比如百度地图!(常常是第三方的框架!在原始的html中实现比较简单)这个时候,如果想外层w页面和里层iframe做数据交互,相互调用js方法!就需要如下实现
解决方案:
一、w页面中如果想访问iframe中的js方法!就需要获取到iframe中的window对象!这个可以上网查,一般获取到iframe节点的dom对象后,通过mapFrame.contentWindow.就可以得到了

var ifr = this.getElementByXid("iframeXid").contentWindow;//取得子页面的窗口
var img = ifr.document.getElementById("bkbjImg");//取得子页面中要操作的dom元素
img.src = "img/bkbjRed.gif";//更新元素的src属性值

二、iframe中的js访问外层w的js方法以map为例,如下:
1、在调用map.html的父窗口mapActivity.w中,随便加一个div,方便调用。源码如下:

2、在调用map.html的父窗口mapActivity.js中,随便加一个函数,为了测试。源码如下:
Model.prototype.test = function(data){
alert(data.a);
};
3、在map.html文件中,在想调用父窗口的地方加入如下代码:
var partenW = window.parent;
var parentDiv = partenW.document.getElementById(‘ContextForId’); //父窗口中定义的div
var parentModel = partenW.justep.Util.getModel(parentDiv);
parentModel.test({a:123}); //父窗口model中定义的函数
4、调用ok!

 

三、如果iframe 内部的页面想跨域访问外层window的corodva插件方法
针对跨域的iframe,由于使用parent.xxxx();或者top.xxxx();直接报跨域的错误,所以需要借助html5的消息通讯机制(postMessage)。内层、外层的页面都监听message事件,再iframe内部点击按钮需要调用插件时,直接发送消息到外层页面上,外层页面接收到消息后调用插件,完成后把插件返回的数据作为参数再发送到iframe内页中,就可以实现跨域情况下iframe内页调用插件的情况。

注意:调用w页面的js方法,一定要保证w页面先加载完毕,父窗口中定义的div被KO绑定后,才可以获取到parentModel,所以尽量不要onload 事件中调用(如果非要如此,请延时一小会儿)