0

这是我需要做的。

有一个网页和另一个网站,两者都托管在同一个域中。我想将整个网站加载到该网页的 div 或 iframe 中。类似的例子是一个像 hidemyass.com 这样的免费代理浏览器。

我知道这很容易做到,但关键是我还需要避免导航。假设该网站有 2 个页面,分别称为 a.htm 和 b.htm 。有一个从 a.htm 到 b.htm 的链接。因此,当有人单击 a.htm 上的链接时,浏览器将重定向到 b.htm

当我将该 a.htm 嵌入页面的一部分时,如果有人单击该链接;它将重定向到浏览器中的 b.htm。我想要做的是避免重定向,当有人点击链接时,b.htm 应该加载到我的页面本身。

我无法更改该网站(在本例中为 a.htm 和 b.htm),一切都应在该页面中完成。

我怎样才能做到这一点?

4

2 回答 2

1

如果您只查看链接点击而不是通过 JavaScript 进行导航,那么应该使用以下代码:

<iframe id="frame" src="a.html"></iframe>
<script type="text/javascript">
  function onClick(event)
  {
    var link = event.target;
    while (link && link.localName != "a")
      link = link.parentNode;

    if (link && !link.hasAttribute("target"))
      link.setAttribute("target", "_parent");
  }

  // Listen to clicks inside the frame
  document.getElementById("frame").contentWindow.addEventListener("click", onClick, false);
</script>

target="_parent"如果没有定义明确的目标,这将检查用户单击的链接并为其添加属性。这意味着针对新窗口/选项卡的链接仍将照常工作,旨在替换当前页面的链接将替换父文档。但这当然只有在 JavaScript 代码a.html不干扰的情况下才有效。

于 2012-05-23T07:15:27.367 回答
0

如果您只想跳过页面中的链接,您可以在链接中添加 onclick 句柄,并在框架尚未完全加载时返回 false

这是脚本

function checkLink(){
  if (canNavigate){
    return true;
  }
  return false;
}

但是如果你想禁用浏览器地址上的导航,你必须像 linkbuck 网站一样

http://c6f11ddd.linkbucks.com/url/http://www.google.com

当广告尚未加载时,linkbuck 将不允许您离开。他们使用这些代码将其存档,您应该对其进行调查

Buster: function () {
  var interval = setInterval(function () {
    if (Lbjs.IsClick) {
     clearInterval(interval);
    }
    else if (Lbjs.Unload > 0) {
     Lbjs.Unload -= 2;
     window.top.location.replace("/cancelnavigation/");
     Lbjs.NavigationNotice();
    }
  }, 1);
  var clearDelay = (this.Countdown > 0) ? this.Countdown : 8;
  setTimeout(function () { clearInterval(interval); }, clearDelay * 1000);
},
NavigationNotice: function () {
  var navNotice = document.getElementById("navNotice");
  navNotice.innerHTML = "<span class=\"warning\" style=\"text-align:center;height:20px;width: 400px;padding: 10px;\"><b>Request Cancelled</b> - Navigation is disabled for 8 Seconds...</span>";
  if (navNotice.style.display == "none") {
    this.Fader.FadeIn(navNotice, 200, function () {
      setTimeout(function () {
      Lbjs.Fader.FadeOut(navNotice, 200, null);
    }, 1500);
  });
} 
于 2012-05-23T07:01:40.440 回答