现象:
定制一个frame分左右2个帧,左侧是树状菜单展示,通过点击实现右侧页面跳转,frame代码如下:
<frameset cols="200,*" frameborder="no" border="0" framespacing="0" > <frame src="navigation.bsh" name="menuFrame" scrolling="auto" id="menuFrame" title="menuFrame" /> <frame src="#" name="contentFrame" id="contentFrame" scrolling="auto" title="contentFrame" /> </frameset>
当contentFrame要访问的url都运行在Butterfly Server上的时候没有问题,一旦访问外网地址后在回跳其他url就会报异常 Permission denied。
问题分析:
1、创建frame后,我们可以认为menuFrame是左侧帧的句柄,而contentFrame是右侧帧的句柄。
第一次当我们在menuFrame中调用 parent.contentFrame.window.location
就可以实现contentFrame跳转到任意url,如果我url都在同一域中,contentFrame一直由我们初始化,没有任何问题。一旦url要访问一个外网地址的话,第一次我们初始化了这个contentFrame对象,然后实现跳转,跳转后 contentFrame就会被其他对象初始化,例如跳转到http://www.sohu.com(此步骤不会产生问题)。这之后,contentFrame就不在由我们掌控,而当我们第二次调用parent.contentFrame.window.location的时候,contentFrame的window对象已经指向www.sohu.com, 和menuFrame不在一个域中,浏览器会提示出错“Permission Denied ...”。
解决方法:
在左侧超级链接中要跳转的地址中把contentFrame句柄一直传递,如下:
<a href="www.sohu.com" target="contentFrame">搜狐</a>
这样contentFrame句柄还是一直握在手中,从而解决访问Permission denied异常。