如题,但我不想使用刷新代理iframe的方式来调用父页面的回调,或者使用定时器监听某变量的变化来调用。还有没有其他的办法?
PS:
webqq那个widget(天气和时钟)做的很好,widget内部为一个单独页面,确实是跨域的。每当点击iframe并拖动,发现有请求发送,但是页面不刷新(浏览器历史没有变化),但确实将点击事件通知到了外部页面,并可以拖动。不知webqq那个跨域iframe拖动是如何实现的?希望高手给予解答,谢谢。
PS:
webqq那个widget(天气和时钟)做的很好,widget内部为一个单独页面,确实是跨域的。每当点击iframe并拖动,发现有请求发送,但是页面不刷新(浏览器历史没有变化),但确实将点击事件通知到了外部页面,并可以拖动。不知webqq那个跨域iframe拖动是如何实现的?希望高手给予解答,谢谢。
webqq天气那个插件所在域为appx.qq.com,他是一个iframe内的一个单独页面,而主域为web.qq.com,这样就明显是跨域问题,跨域时javascript不支持iframe的click事件更不能通信,而拖动肯定要监听鼠标点击事件,这个事件只能在iframe内部获取到,而域的鸿沟导致这事传递起来很机车。
古来跨域的方式有多种如iframe(window.name,hash),img.src,jsonp等,看webqq的源码,感觉比较崩溃,能力有限如看天书般~但根据这个问题我想应该使用iframe的方式比较稳妥,但是想让同域的脚本执行还是有些技巧的,考验的是经验,一般情况下有两种方式触发,一种是修改src,一种是timer检测,两种都很蛋疼,故前来询问有什么更好的跨域方式。无果,但有幸认识到iframe的resize事件是可以在主域监听的,所以一切都变得很优雅了,但是webqq是如何实现的,小弟实不才,看不懂。
实现方式:
使用传统的iframe代理方式,只是不修改src也不timer,而使用监听resize事件,这样当要传递消息时只需要改变代理iframe的size就能够触发同域的脚本,如此便很好了。
<div id='appWindow_11'>
<iframe></iframe>
</div>
的话,那么iframe的区域在点击事件看来就好像空出来一样,没反应,也就是说iframe没有click事件。所以如果想要让这个“空”出来的区域有click响应就得跨域处理。
只是我不知webqq是咋实现的~
<div id='mask'>一个透明遮罩</div>
<iframe></iframe>
</div>
敢不敢告诉我webqq那个是如何搞的,我看不到他是如何跨域的~