javascript - 我可以在不离开的情况下更改地址栏中的文本吗?

标签 javascript html iframe

我为客户制作了一个搜索页面,但在这种情况下,实际的搜索页面位于 iframe 中。并向用户呈现一个围绕所述 iframe 的装饰外壳,它将其 URL 参数传递给 iframe ,然后解释它们并执行搜索。这是我无法改变的。它还给我带来了一个独特的问题,即如果用户在搜索页面的搜索栏中键入内容以执行另一次搜索,则 iframe 会刷新,但 shell 页面不会刷新。这意味着该 URL 现在不再与当前搜索相关。 如何在不离开此 shell 页面的情况下更改地址栏中的 URL?该系统的全部要点在于减少了等待 iframe 的时间。刷新整个页面,所以刷新整个页面会适得其反。

完整解决方案


对于任何只想要代码片段的人,这是我对 Ian 解决方案的最终实现:

<?PHP
// ...
function buildTitleChanger($search) {
    ?>

    window.top.history.pushState({search : "<?PHP echo str_replace("\"", "\\\"", $search); ?>"}, document.title, window.location.search);
    window.top.document.title = document.title;<?PHP
}
// ...
?>

使用内联 PHP 有点脏,但它 100% 的时间都有效 :3

最佳答案

您可以使用 window.pushState 之类的内容更改部分 URL。看看MDN的解释:

https://developer.mozilla.org/en-US/docs/DOM/Manipulating_the_browser_history

浏览器兼容性:http://caniuse.com/history

history.js 是一个很好的库,它包装了这些特性并在不支持它的浏览器中提供了类似的功能:http://balupton.github.io/history.js/demo/

来自 MDN 链接的示例:

示例

假设 http://mozilla.org/foo.html 执行以下 JavaScript:

var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");

这将导致 URL 栏显示 http://mozilla.org/bar.html,但不会导致浏览器加载 bar.html 或甚至检查 bar.html 是否存在。

假设现在用户导航到 http://google.com,然后点击返回。此时,地址栏会显示http://mozilla.org/bar.html,页面会得到一个popstate事件,它的state对象包含了一份状态对象。该页面本身看起来像 foo.html,尽管该页面可能会在 popstate 事件期间修改其内容。

如果我们再次单击返回,URL 将变为 http://mozilla.org/foo.html,文档将获得另一个 popstate 事件,这时间与空状态对象。在这里,返回也不会更改文档的内容与上一步中的内容相同,尽管文档可能会在收到 popstate 事件后手动更新其内容。

关于javascript - 我可以在不离开的情况下更改地址栏中的文本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16207422/

相关文章:

javascript - 如何将进度圈限制在 60 而不是 100% 以内

javascript - 将每个里给出的时间与当前时间进行比较

html - 文本未对齐

html - 如何使用iframe中的链接更改父页面

javascript - 在 JavaScript 中切换 iframe 滚动?

javascript - $.removeCookie 不会删除 Chrome 中的 cookie

javascript - 有没有办法简化 document.getElementById?

java - HTML表单参数全部为空

html - 透明背景在图像调整大小时变为白色

javascript - 访问 jquery 对话框内 iframe 内的元素