我正在编写一个将在触摸屏上以信息亭模式运行的 Web 应用程序。我目前仅将其定位为在 Firefox 3 上运行。我的一些用例需要访问外部站点。我希望使用嵌入式浏览器来做到这一点,我正在解决这个问题 <iframe>. 。我需要嵌入式主页的后退/前进按钮。

我已经成功地访问了 iframe 的历史对象

var w = document.getElementById('embeddedBrowser').contentWindow;
w.history.back();

history 嵌入窗口的属性与父窗口的属性相同。因此对于新加载的 <iframe>, ,该调用将返回到系统的上一页。

有什么办法可以避免这种情况或者有更正确的方法来解决这个问题吗?

有帮助吗?

解决方案

因为每个标签中只共享一个历史对象,所以这似乎是不可能的。正确的方法是在回电之前测试window.history.currentwindow.history.previous。不幸的是,<=>具有特权,因此无法使用未签名的页面。

这是一个混乱的解决方法的粗略草图:

<iframe src="somepage.html" name="myframe"></iframe>
<p><a href="#" id="backBtn">Back</a></p>

<script type="text/javascript">

  document.getElementById('backBtn').onclick = function () {
    if (window.frames['myframe'].location.hash !== '#stopper') {
      window.history.back();
    }
    // ... else hide the button?
    return false; // pop event bubble
  };
  window.frames['myframe'].onload = function () {
    this.location.hash = 'stopper';
  };

</script>

当然,这假设在父窗口中没有(#hash)浏览,等等,但它似乎适用于限制反向移动的问题。

其他提示

您可能想看一下 Adobe AIR. 。它允许您使用所有相同的工具/语言(ajax、html 等)编写应用程序,但由于它作为桌面应用程序运行而不是在 Web 浏览器中运行,因此您可以更好地控制事物,例如嵌入浏览器框架和确切地知道他们在做什么、将访问什么 URL、控制其历史记录等。 看这里 获取一些入门指南。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top