如何更改“父”框架的 URL?

Posted

技术标签:

【中文标题】如何更改“父”框架的 URL?【英文标题】:How do I change the URL of the "parent" frame? 【发布时间】:2011-05-20 16:12:31 【问题描述】:

我有一个我自己托管的网站。我没有静态 IP 地址,因此我的域的所有流量都通过掩码转发到我的 DDNS 帐户。生成的页面如下所示...

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <title>mydomianname.com</title>
</head>
<frameset rows="100%,*" border="0">
  <frame src="http://myddns.dyndns.org/mydomainname" frameborder="0" />
  <frame frameborder="0" noresize />
</frameset>
</html>

当用户在“子”框架内导航时,如何更新“父”框架的 URL?

更新:成功了吗?

我曾尝试使用 javascript 执行此操作,但在获取正确的 href 到我的 javascript 函数时遇到问题,而不会产生不利的副作用(打开两个窗口,让我的主窗口转到错误的位置,或者让它所以后退按钮无法正常工作)。我所需要的只是我的a 标签的一个属性来保存一个我可以在我的javascript 中使用的值,但根本不会做任何其他事情。添加属性value 事件虽然它不是a 标记的本机属性,但效果很好。

a 标签...

<a onclick="url_update(this);" value="test/test.html" href="javascript:void(0);">test link</a>

还有 javascript 函数...

function url_update(element)
    base_url = 'http://mydomain.com/';
    window.parent.location.href = base_url + element.getAttribute('value');

生成的更新后的 URL 是...

http://mydomain.com/test/test.html

...并且没有前面提到的副作用。

我想修复的唯一“副作用”是在浏览器窗口底部的信息栏中显示链接。现在它显示javascript:void(0);,因为这就是写在我的href 属性中,但我希望它在链接悬停时显示更新的 URL...有什么想法吗?

如果我可以废弃所有这些 javascript 并改用 IIS 7 URL Rewrite 2.0 来做这件事会更好……但我还没有掌握 URL 重写的黑魔法。

【问题讨论】:

可能是一个简单的window.open("the-new-url-goes-here", "_top")。如果您使用的是链接,那么 &lt;a href="some-url-goes-here" target="_top"&gt;Open me&lt;/a&gt;. 【参考方案1】:

javascript:

window.top.location = 'anther url'

--更新您更新的问题

使用element.getAttribute('value') 而不是element.value

--更新#2 使用 href 属性,但是,在 onclick 函数中添加一个return false;

<a onclick="url_update(this);return false;" value="test/test.html" href="test/test.html">test link</a>

一旦你这样做了,你也可以跳过 value 属性而只使用 href 属性,更新你的 url_update 函数以使用 element.href 而不是 element.value

【讨论】:

您的答案看起来可能有效,但我需要为我网站上的每个链接执行此操作。如果我有类似 测试链接 之类的东西,那么我如何将 /test/test.html 传递给单个 javascript 函数,该函数将更新调用该函数的每个链接?跨度> 太棒了,我不知道你可以添加标签本身没有的属性!现在我可以使用 value 而不是滥用 rel 和/或 rev 属性。您是否还知道当我将鼠标悬停在链接上时,如何使更新后的 URL 正确显示在浏览器窗口底部的信息栏中? (见更新的问题)。【参考方案2】:

很难从您的问题中准确判断哪些框架在做什么,但如果 Scrum Meister 的解决方案适合您,那么您可以通过将其添加到每个 A 标记来轻松实现您想要的。

 target="_top"

您的示例已修改。

<a href="test/test.html" target="_top">test link</a> 

你也可以用 jquery 来做到这一点... 在所有A标签都应该有target="_top"的页面上,您可以在页面上实现以下jquery代码,它将动态地将目标添加到所有链接。

<script language="javascript" type="text/javascript">
$(function()

     $("A").attr("target","_top");
);
</script>

假设你有带有 href 属性的normail A标签,你可以一起摆脱onclick,目标解决方案不需要其他javascript。

【讨论】:

我同意你的观点,很难从我的问题中看出发生了什么,但是当我提供所有细节时,我的问题没有得到回答,因为人们不喜欢阅读long :) 我尝试像你说的那样使用目标标签,但无法让它在我的设置中正常工作,但它确实让我想到尝试一些其他属性,只是为了将值传递给我的 javascript 函数。我使用rel 只是为了保持价值,而且效果很好。我知道这不是 rel 属性的用途,但它有效。请参阅我更新的问题。 Target = "_top" 是迄今为止最简单的方法!谢谢!【参考方案3】:

首先,您需要在同一个域中...否则出于安全原因,您无法更改它。 在您的子框架中声明并调用此函数

function change(theUrl)

window.parent.reloadContent(theUrl);

在你的父母有以下功能:

function reloadContent(theUrl)
  if (theUrl != "") 
      document.getElementById("frameID").src= theUrl ; 
   

【讨论】:

以上是关于如何更改“父”框架的 URL?的主要内容,如果未能解决你的问题,请参考以下文章

从 iFrame 更改父窗口 URL

为啥 iframe 可以从不同的域更改父窗口的 URL?

如何在 Wordpress 中创建框架以便在不更改 URL 的情况下将文章加载到首页?

如何在 django rest 框架的分页 URL 中更改下一个键中的主机?

从 IFrame 更改父窗口的 URL

Vue子路由器:url更改但显示父组件