代码之家  ›  专栏  ›  技术社区  ›  Guðmundur Bjarni

带iframe的嵌入式浏览器

  •  2
  • Guðmundur Bjarni  · 技术社区  · 17 年前

    我正在编写一个在触摸屏上以kiosk模式运行的Web应用程序。我目前的目标仅仅是在火狐3上运行。我需要访问外部站点的一些用例。我希望通过一个嵌入式浏览器来实现这一点,这是我在 <iframe> . 我需要嵌入主页的后退/前进按钮。

    我已成功访问iframe的history对象

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

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

    有没有什么方法可以避免这种情况,或者更正确地解决这种情况?

    2 回复  |  直到 17 年前
        1
  •  4
  •   Borgar    17 年前

    因为每个选项卡中只有一个历史对象共享,所以这似乎是不可能的。正确的方法是测试 window.history.current window.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)浏览,等等,但它似乎适用于限制向后移动的问题。

        2
  •  1
  •   Community Mohan Dere    9 年前

    你可能想看看 Adobe AIR . 它允许您使用所有相同的工具/语言(Ajax、HTML等)编写应用程序,但由于它作为桌面应用程序运行,而不是在Web浏览器中运行,因此您可以更好地控制事情,例如嵌入浏览器框架并确切知道它们在做什么、将要使用什么URL、控制它的历史记录等。 Look here 关于开始的几点建议。