我希望我的网页分为两部分。顶部有一个文本框。当用户在文本框中键入URL时,底部会浏览该URL的内容。当用户单击底部部分中的链接时,底部部分将导航到新URL,顶部的文本框将更改为新URL。我该怎么办?
注意:此行为与Google翻译中的行为相同(例如here),但没有任何翻译。
答案 0 :(得分:1)
同源问题
实现所要求的唯一方法就是谷歌翻译完成它的工作方式 - 即使用服务器端驱动的脚本作为代理请求:
以上是从Google翻译用于显示翻译页面的iframe中获取的网址。需要注意的主要事项是,网址的域部分与父网页的网址http://translate.google.com
相同 - 如果您的框架和父窗口不共享同一个域,那么你的父窗口的JavaScript将无法访问iframe中的任何内容。它将被浏览器的内置安全性阻止。
显然,如果在你的项目中你只是要浏览你自己的网页(在同一个域名上),上面不会有问题,但考虑到你提供谷歌翻译作为一个例子我假设没有。
Google会做什么?
上述网址的作用是要求服务器端获取维基百科页面并将其返回,以便iframe可以显示它 - 但是对于iframe,此页面似乎托管在translate.google.com
而非{ {1}}。这意味着iframe与父窗口保持在同一个源中,这意味着可以使用JavaScript编辑或修改iframe中的页面。
重写代理内容
基本上我所说的是仅使用HTML和客户端JavaScript无法实现这一点 - 您需要从服务器端获得帮助,即PHP,Python,Ruby,Lisp,Node ..等等。此脚本将负责确保代理页面正确显示/呈现,例如您必须确保原始服务器上的content / images / css的相对链接未被破坏(您可以使用wikipedia
标记或物理重写相对链接)。根据其网站的使用条款,还有许多网站将此视为非法使用其网站,因此应在您的服务中列入黑名单。
阻止用户脱离代理
获得代理脚本后,您可以使用iframe (请避免使用旧的框架集),以及base
或onload
的一些JavaScript魔法iframe重写页面中的所有链接,表单和按钮。这样,当单击或提交时,它们会发布到您的代理脚本而不是原始目标。此重写代码还必须将原始目标发送到您的代理脚本,例如Google翻译网址中的ondomready
。在对此进行排序后,这意味着您的iframe将使用新的目标内容重新加载,但是 - 所有重要的是 - 您的iframe将保留在同一个域中。
如果是我个人,我会重新考虑你的策略
总的来说,这不是一项简单的任务,也不是100%全面的,因为有很多事情会导致问题:
谷歌之所以能做到这一点,是因为他们有大量的时间,金钱和资源......哦,谷歌翻译的大部分内容实际上是在服务器端处理的 - 而不是用JavaScript。
如果您正在寻找通过您自己的网站浏览的跟踪用户:
如果您希望跟踪访问您网站的用户,然后前往世界其他网络:
答案 1 :(得分:0)
在第二帧添加javascript函数 -
<frame id="dataframe" src="frame_a.htm" onload="load()">
让文本框有一个id - 说“test”
function load()
{
document.getElementById('test').value=document.getElementById('dataframe').src
}