目标是实现双向的跨域访问,即A域的脚本可以操作B域的网页,B域的脚本也可以操作A域的网页。查询资料后发现应该重载InternetSecurityManager的getSecurityID函数以实现。我重载以后,将所有URL都返回同样的SecurityID:{'h','t','t','p',':','w','w','w','.','a','b','c','.','c','o','m',3,0,0,0}希望能够欺骗IE,以为都是相同的域,但是却不能完全成功。如果A域访问B域,而B域是abc.com,则可以成功,但是B域访问A域却不行。其他情况都不行,看来好像需要重载什么函数,请各位高手出马研究研究。
浏览器启动以后,首先访问A域的网页,随着用户的操作,A域的网页会在框架中访问B域甚至更多域的网页。A域的网页会和B域等其他域的脚本发生交互的脚本调用,比如top.func1();parent.aa.func2(top.b.document.outerHTML);等调用。什么样的脚本都有,真是应有尽有:)所以,如果不彻底解决,依靠一些针对某个脚本的特殊处理,在这个案例中是行不通的。
借问蒋老大一句,SetZoneMapping是主动调用还是被动调用的?如果是我主动调用,如何处理随时可能出现的新域名?
我将所有的站点(*://*.*.*.*)都加到了可信站点,而且将可信站点的安全级别降到了最低。可是跨域脚本的权限仍然被限制。
我又同时使用重载getSecurityID函数试图欺骗,仍然是不行。不知蒋兄是如何实现的?蒋兄可以做一个测试用例:
a.html
<frameset rows="50,50">
<frame src="http://www.baidu.com" id="aa">
<frame src="b.html" id="bb">
</frameset>
-------------------------------------------------------------------------------
b.html
<body>
<input type="button" value="ok" onclick="alert(top.aa.body.document.outerHTML);">
</body>打开a.html后,会加载百度和b.html,点击b.html的按钮,如果没有跨域访问的限制,则会显示a的网页内容,否则就会提示没有权限。
让我们共同研究研究。
我认为此处实际上应该重载GetZoneMapping,这样其他函数在读取ZoneMapping信息的时候就会受到相应的影响。
抱歉,b.html我写的时候有个笔误,b.html的内容应该是
b.html
<body>
<input type="button" value="ok" onclick="alert(top.aa.document.body.outerHTML);">
</body>
james,你说的两种办法都试验了,可是都不行,不知道还有没有什么思路?
FF, IE都不会支持这种行为, 如果成功的话, 对客户端用户就是一种欺骗.
是不可能让FF或者IE这么做的,只有定制的浏览器才有可能。
这是我们自己的客户端需要的功能,这个和欺骗客户没有关系。
只不过我觉得这是一个非常值得研究和探讨的东西,希望能够有个让人可以接受的结论。
我想,遇到问题不细抠,就永远是一个工匠。