如题,但我不想使用刷新代理iframe的方式来调用父页面的回调,或者使用定时器监听某变量的变化来调用。还有没有其他的办法?
PS:
webqq那个widget(天气和时钟)做的很好,widget内部为一个单独页面,确实是跨域的。每当点击iframe并拖动,发现有请求发送,但是页面不刷新(浏览器历史没有变化),但确实将点击事件通知到了外部页面,并可以拖动。不知webqq那个跨域iframe拖动是如何实现的?希望高手给予解答,谢谢。

解决方案 »

  1.   

    时钟跨域iframe拖动?不是那个顶层的 appWindow_11这个元素在动吗?
      

  2.   

    好吧,我说明下:
    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就能够触发同域的脚本,如此便很好了。
      

  3.   

    其实我是想问的是你为什么会认为拖动时钟的请求(应该是监测吧)的方法是由内层的iframe触发事件来做的呢,据我看到的顶层元素id是这个appWindow_11的z-index值很高,触发监测请求的事件为什么不可能绑在这个元素上呢?
      

  4.   

    如果是这样
    <div id='appWindow_11'>
       <iframe></iframe>
    </div>
    的话,那么iframe的区域在点击事件看来就好像空出来一样,没反应,也就是说iframe没有click事件。所以如果想要让这个“空”出来的区域有click响应就得跨域处理。
    只是我不知webqq是咋实现的~
      

  5.   

    appWindow_11遮罩在iframe上面,你其实点击不到iframe因为你始终点击的是div,而将监测的请求绑定在div层上就行了,而你如果想监测iframe的链接点击事件话,那就是你说的绑定resize事件了。
      

  6.   

    跨子域是没有问题的,只要主域相同就行了两页面的 document.domain = 'qq.com'另外,如果当需要操作iframe的移动时,可以这样<div id='appWindow_11'>
      <div id='mask'>一个透明遮罩</div>
      <iframe></iframe>
    </div>
      

  7.   

    iframe里面有操作,webqq天气那个插件,iframe里面的操作正常,也就是说如果通过div覆盖iframe的话,那ifram里面的操作都无法完成了~
      

  8.   

    iframe里面有操作,webqq天气那个插件,iframe里面的操作正常,也就是说如果通过div覆盖iframe的话,那ifram里面的操作都无法完成了~
    敢不敢告诉我webqq那个是如何搞的,我看不到他是如何跨域的~