嵌入式浏览器与iframe

3

我正在编写一个网络应用程序,它将在触摸屏上以kiosk模式运行。目前,我只针对Firefox 3进行开发。其中一些用例需要访问外部网站。我希望使用嵌入式浏览器来实现这一点,我正在使用<iframe>标签解决此问题。我需要在嵌入式主页上添加后退/前进按钮。

我已经成功地访问了iframe的history对象:

var w = document.getElementById('embeddedBrowser').contentWindow;
w.history.back();
嵌入窗口的历史记录与父窗口相同。因此,对于新加载的<iframe>,此调用将返回系统的上一页。
是否有避免此问题或更正确的解决方法?

你是要将它嵌入到另一个应用程序中吗? - Diodeus - James MacFarlane
我有一个运行在触摸屏幕上的Web应用程序,处于亭子模式。嵌入的站点只是Web应用程序中页面内的一个iframe。 - Guðmundur Bjarni
2个回答

4
因为每个选项卡中只共享一个历史记录对象,所以这似乎是不可能的。正确的方法是在回调之前测试window.history.currentwindow.history.previous。不幸的是,window.history.current是特权的,因此未经签名的页面无法使用。
下面是一个混乱解决方法的大致草图:
<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)浏览等操作的情况下,但对于限制返回操作似乎是有效的。

1
你可能想要看一下 Adobe AIR。它允许您使用所有相同的工具/语言(ajax,html等等)编写应用程序,但由于它作为桌面应用程序运行而不是在Web浏览器中,因此您对事物有更多的控制,例如嵌入浏览器框架并确切地了解它们正在做什么、它去往哪个URL、控制它的历史记录等。在这里查看一些入门指南。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接