0

我试图让一个子 JavaScript 应用程序更新它的父文档。

本质上,这是一个非常简单的问题:

  • JavaScript 程序在它自己的文档中打开一个 iframe。
  • 另一个 JavaScript 程序被加载到 iframe 中。
  • 第二个程序需要更改原始页面中的片段(锚点)。
  • 第一个程序,然后“转到”新片段(文档位置已更新,但文档未刷新)。

在无数的网页中,都有关于如何做到这一点的描述,使用的技巧如下:

window.parent.location.hash = "#" + string

但是当我在 IE 中执行此操作时,父级似乎正在刷新自己。我认为页面正在重新加载。

只是让这有点棘手:

  • 我需要所有浏览器(或至少 IE 和 Firefox)的解决方案。
  • 这两个 JavaScript 程序实际上都是 GWT Web 应用程序(因此我可以将特定代码绑定到不同的浏览器版本)。
  • 如有必要,我可以做一些奇怪的事情来绕过安全,父母和孩子总是互相认识的。孩子总是被父母叫住。

我已经尝试了各种网页上列出的许多其他技巧,但到目前为止,似乎没有一个足够稳定和简单到可以实际部署。

4

2 回答 2

1

使用element.scrollIntoViewscrollTo取决于您的浏览器。

于 2009-06-26T14:36:38.757 回答
0

我在我的应用程序中发现了以下 JavaScript(由 GWT 生成):

function $initUrlCheckTimer(this$static){
  var historyImplRef = this$static;
  var urlChecker = function(){
    $wnd.setTimeout(urlChecker, 250);
    var hash = getLocationHash();
    if (hash.length > 0) {
      var token = '';
      try {
        token = historyImplRef.decodeFragment(hash.substring(1));
      }
       catch (e) {
        $wnd.location.reload();
      }
      var historyToken = ($clinit_75() , $wnd.__gwt_historyToken || '');
      if (historyToken && token != historyToken) {
        $wnd.location.reload();
      }
    }
  }
  ;
  urlChecker();
}

我确实注意到 GWT 中的顶级文档调用了应用程序一(生成的代码从将父级分配给 $wnd 开始,其中 $wnd.location 是我的实际 URL)。

我在想(我可能错了)是 GWT 历史机制涉及观看 __gwt_historyToken,直到它发生变化,然后更新应用程序。如果父位置发生变化,“其他东西”似乎也会强制重新加载。我不能只更改文档位置,而不以某种方式将其与此 GWT 代码集成。

于 2009-06-26T18:15:19.323 回答