从html javascript调用时,Adobe AIR history.back()不起作用

从html javascript调用时,Adobe AIR history.back()不起作用,javascript,html,air,Javascript,Html,Air,我正在开发air应用程序(html/ajax/javascript)。我需要做一个导航功能,比如在一个带有iframe的页面中的浏览器后退和前进按钮,所有页面都在同一个域中 我有以下情况: AdobeAIR(2.7.1版)应用程序,从mydomain.com加载(AIR.htmloader)index.php 文件具有以下设计: <html> <body> <input type="button" value="< BACK" oncl

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

我有以下情况:

AdobeAIR(2.7.1版)应用程序,从mydomain.com加载(AIR.htmloader)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中使用,但不能在AdobeAIR应用程序中使用

我找不到关于这个问题的任何文档,真的不明白问题出在哪里,因为我知道AdobeAIR使用webkit浏览网页,如chrome和safari,但只有在air应用程序中,此代码不起作用

我希望有人能帮助我


谢谢

我觉得你混淆了一些概念。所以我会尽力帮忙

首先是这样一句话:“所有页面都在同一个域上”

Adobe AIR应用程序中没有域。你不是在浏览。您正在从文件系统加载一个文件,并将其呈现为HTML。空中没有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正在浏览,所以您的本地PHP安装(如果您有)不会在将这些文件交付给AIR之前解析和处理它们

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

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

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

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

    祝你好运

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

    每个沙盒中的内容不能与另一个没有桥接器的沙盒中的内容对话。由于您正在加载带有远程内容的iframe,因此您的应用程序沙盒中试图访问它的HTML文件可能受到限制

    我认为你需要研究一下所谓的沙箱桥。特别是父到子沙盒桥


    我做过一次关于这个的演讲。这些幻灯片可以在我的博客上找到。我会给你一个直接的链接,但我在打电话。只需搜索航空安全或CFU 2010

    我的应用程序基本上是dreamweaver中的一个HTML站点,带有flash简介和HTML页面之间的链接导航,然后转换为air应用程序

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

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

    它是有效的。对于我的应用程序,它可以在所有浏览器中运行,并且可以作为Mac和windows的桌面AIR应用程序。我只是想通过我的方式进入air,但我想这可能会帮助您解决问题。

    我正在adobe air应用程序中加载远程php站点。该站点有主菜单和iframe,该菜单在其中加载来自同一域(远程)的页面。