openWin简单点说就是:像是一个浏览器
openFrame就是对应openWin浏览器里面打开的每一个网页
有些操作只能在openWin里面执行,比如监听安卓返回事件,只能在openWin里面才有效,openFrame里面无效。
execScript传递参数无效,在同一个openWin下面,所有frame之间交互只要frameName参数就行了。但是如果跨越openWin,类似在不同浏览器下面传递参数,就需要加上name参数,也就是Win的名字。
我觉得你的情况可能是这样的:
你打开WINA,然后打开了frame(用户)和frame(游客),然后通过frame(游客)打开WINB,
但是这时候,WINA不是关闭了,而是在它的基础上打开了WINB,所以你关闭WINB时,不需要再打开WINA,而是直接关闭frame(游客)即可。而且我觉得如你所说,可能确实是游客挡住了用户,那你也可以用bringFrameToFront方法把frame(用户)调整到前面,应该也能解决问题。
我觉得如果是这种情况,未必需要两个frame切换,可以像版主说的一样写在一个frame里即可,先设置一个标识检测是否为登录状态,如果是则加载用户需要显示的内容,如果否则显示游客需要看到的内容,可以分别写在不同的块里比如不同的DIV,然后通过标识来切换DIV是否显示即可。
如果设计上必须用两个frame,则你一进来时不要同时打开两个frame,而是根据标识判断是否登陆,然后打开相应的frame,而登陆或者退出登录后,再打开另一个frame,这样的话,新打开的frame自然是在原来的frame之上。
html,body{
margin-right: 0;
}
function openFilter(){
api.openWin({
name:'filter_header',
url:'./filter_header.html',
bgColor:rgba(0,0,0,0.8),//或者直接不传该参数 ...
opaque:false
});
}
经验分享:
比如a.html页面要使用openFrame方式弹窗b.html页面,实现半透明遮挡a.html效果
第一步:在b.html顶部设置
body{
background: transparent;
}
第二步:在a.html中openFrame参数中添加
bgColor:'rgba(255, 255, 255, 0.2)',
比如:
- function opentest() {
- api.openFrame({
- name : 'testframe',
- url : '../html/testtest.html',
- rect : {
- x : 0,
- y : 0,
- w : 'auto',
- h : 'auto'
- },
- bgColor:'rgba(255, 255, 255, 0.2)',
- pageParam : {
- program_ids : program_ids,
- nameTitle : nameTitle,
- type : 'pro'
- }
- });
- }