Javascript iframe如何更改其父级';s URL片段(不引起刷新)?
我试图让一个子JavaScript应用程序更新它的父文档 本质上,这是一个非常简单的问题: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程序打开一个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();
}