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