Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript iframe如何更改其父级';s URL片段(不引起刷新)?_Javascript_Html_Gwt_Iframe_Fragment Identifier - Fatal编程技术网

Javascript iframe如何更改其父级';s URL片段(不引起刷新)?

Javascript iframe如何更改其父级';s URL片段(不引起刷新)?,javascript,html,gwt,iframe,fragment-identifier,Javascript,Html,Gwt,Iframe,Fragment Identifier,我试图让一个子JavaScript应用程序更新它的父文档 本质上,这是一个非常简单的问题: JavaScript程序打开一个iframe 在它自己的文档中 另一个JavaScript程序被加载 进入iframe 第二个计划需要改变 原文中的片段(锚定) 页面 第一个程序,然后“去”到 新片段(文档位置) 已更新,但文档未更新 刷新) 在无数的网页中,都有关于如何做到这一点的描述,使用的技巧如下: window.parent.location.hash = "#" + string 但当我在

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

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

  • JavaScript程序打开一个iframe 在它自己的文档中
  • 另一个JavaScript程序被加载 进入iframe
  • 第二个计划需要改变 原文中的片段(锚定) 页面
  • 第一个程序,然后“去”到 新片段(文档位置) 已更新,但文档未更新 刷新)
在无数的网页中,都有关于如何做到这一点的描述,使用的技巧如下:

window.parent.location.hash = "#" + string
但当我在IE中这样做时,家长似乎正在刷新自己。我想页面正在重新加载

只是为了让这更棘手一点:

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

我尝试了各种网页上列出的一系列其他技巧,但到目前为止,还没有任何东西看起来足够稳定和简单,可以实际部署。

使用
元素。scrollIntoView
scrollTo
,具体取决于您的浏览器。

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

我注意到GWT中的顶级文档调用了应用程序1(生成的代码首先将父对象分配给$wnd,其中$wnd.location是我的实际URL)


我的想法是(我可能错了)GWT历史机制涉及到监视uuu GWT_uHistoryToken,直到它改变,然后更新应用程序。如果父位置更改,“其他东西”似乎也在强制重新加载。我不能只更改文档位置,而不将其与此GWT代码集成。

这很有趣,但我认为GWT会动态创建锚,因此在实际访问该片段之前我没有元素。或者至少在访问该片段之前,我无法引用元素。
“\+string
告诉我字符串是id,如果你有,你可以得到元素我使用的字符串包含一个“令牌”,GWT通过它的历史机制和一些参数发送回我。大多数情况下,我认为匹配元素实际上并不存在,直到用户转到该锚点(但我不完全确定,它被隐藏在GWT中)。现在,在字符串中,我为菜单使用类似路径的导航(用:)和一组类似URL参数的参数。所有这些在片段中都是非常合法的(允许大量字符)。
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();
}