【问题标题】:Adobe AIR history.back() doesnt work when calling from html javascript从 html javascript 调用时,Adobe AIR history.back() 不起作用
【发布时间】:2011-09-26 14:40:01
【问题描述】:

我正在开发空中应用程序 (html/ajax/javascript)。我需要制作一个导航功能,例如带有 iframe 的页面中的浏览器后退和前进按钮,所有页面都在同一个域中。

我有以下场景:

从 mydomain.com 加载 (air.HTMLLoader) index.php 的 Adob​​e AIR(2.7.1 版)应用程序

http://mydomain.com/index.php 文件有以下设计:

<html>
    <body>
        <input type="button" value="< BACK" onclick="iframeID.history.back();">
        <input type="button" value="FORWARD >" onclick="iframeID.history.forward();">
        <ul>
            <li><a href="http://mydomain.com/page1.php" target="iframeNAME">page 1</a></li>
            <li><a href="http://mydomain.com/page2.php" target="iframeNAME">page 2</a></li>
        </ul>
        <iframe src="page_default.php" id="iframeID" name="iframeNAME"></iframe>
    </body>
</html>

因此,此代码适用于 FireFox、Chrome、Safari,但不适用于 Adob​​e AIR 应用程序

我找不到有关此问题的任何文档,真的无法理解问题出在哪里,因为我知道 adobe air 使用 webkit 进行网页浏览,例如 chrome 和 safari,但仅在 air 应用程序中此代码不起作用。

我希望有人可以帮助我。

谢谢!

【问题讨论】:

    标签: javascript html air


    【解决方案1】:

    我的应用程序基本上是 Dreamweaver 中的 HTML 站点,带有 Flash 介绍,以及 HTML 页面之间的链接导航,然后将其转换为空中应用程序。

    所有 HTML 文件都在同一个目录中。因此 page2.html 与 page3.html 位于同一根站点文件夹中。我的一些页面需要导航回上一页。但是,因为您可以通过各种路径到达该页面,所以我真的需要后台功能。因此,在尝试了很多非常复杂的建议之后,我从 w3schools 中删除了这个非常基本的示例:

    <html>
    <head>
    <script type="text/javascript">
    function goBack()
      {
      window.history.back()
      }
    </script>
    </head>
    <body>
    
    <input type="button" value="Back" onclick="goBack()" />
    
    </body>
    </html>
    

    而且它有效。对于我的应用程序,它适用于所有浏览器,并作为 Mac 和 windows 的桌面 AIR 应用程序。我只是在努力解决问题,但我认为这可能会帮助您解决问题。

    【讨论】:

      【解决方案2】:

      我觉得您混淆了一些概念。所以我会尽力提供帮助。

      首先是声明:“所有页面都在同一个域上”

      Adobe AIR 应用程序中没有域。您没有浏览http://localhost/。您正在从文件系统加载文件,并将其呈现为 HTML。 AIR 中没有 URL(除非您正在访问远程系统),因此,据我了解,history.back() 不起作用。

      其次,我关心的是这几行:

      <li><a href="/page1.php" target="iframeNAME">page 1</a></li>
      <li><a href="/page2.php" target="iframeNAME">page 2</a></li>
      

      那些不会渲染。 AIR 没有内置 PHP 支持。就像我说的,AIR 正在浏览 http://localhost,因此您的本地 PHP 安装(如果有的话)不会在这些文件被传递到 AIR 之前对其进行解析和处理。

      构建桌面应用程序与构建 Web 应用程序非常不同。 only 依赖 HTML 和 JS 会带来一些挑战。您失去了 PHP 或 ColdFusion 等服务器端解决方案的许多好处。没有会话存储,没有 cookie(访问远程服务时除外),没有 URL 参数等。

      不过,您确实可以通过 AIR 获得很多额外的好处。您可以访问本地文件系统,获得加密的本地存储,不受浏览器同源策略的限制,可以使用本地数据库(甚至是加密的)等等。

      如果您确实需要在 AIR 中的 iframe 中浏览和呈现 PHP 文件,并且需要有一个后退和前进按钮,那么您需要将 PHP 托管在远程某个地方(或者让您的所有用户都安装它本地)并且您需要让该 iframe 远程调用该页面。然后我怀疑 history.back() 会起作用。

      您可以创建自己的后退/前进功能,只需使用 AIR 之一存储正在查看的页面的历史记录许多本地存储选项(ELS、StorageObject、SQLite、文件系统),然后实现使用这些的后退和前进按钮商店重新加载内容。但我认为更好的选择是在您的应用程序中简单地使用高质量的导航。

      祝你好运。

      【讨论】:

      • 我正在 adobe air 应用程序中加载远程 php 站点。该站点具有主菜单和 iframe,此菜单从同一域(远程)加载页面。
      【解决方案3】:

      在 AIR 中,应用程序是基于内容加载位置的“沙盒”。您的主应用程序位于“应用程序沙箱”中,远程加载的内容位于“非应用程序沙箱”中。每个沙盒的功能都受到限制。

      如果没有桥接,每个沙箱中的内容无法与另一个沙箱中的内容通信。由于您正在使用远程内容加载 iframe,因此尝试访问它的应用程序沙箱 HTML 文件可能会受到限制。

      我认为您需要研究所谓的沙盒桥。特别是父子沙盒桥。

      我曾经做过一次演讲。这些幻灯片可在我的博客上找到。 .我会给你一个直接的链接,但我在我的手机上。只需搜索 AIR Security 或 CFUnited 2010。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-30
        • 1970-01-01
        • 2013-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多