Adobe AIR history.back () не работает при вызове из HTML-JavaScript - PullRequest
2 голосов
/ 26 сентября 2011

Я работаю над воздушным приложением (html / ajax / javascript).Мне нужно сделать функцию навигации, например, кнопку браузера назад и вперед на странице с iframe, все страницы находятся в одном домене.

У меня есть следующий сценарий:

Adobe AIR (версия2.7.1) приложение, которое загружает (air.HTMLLoader) index.php с mydomain.com

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, но не в приложении Adobe AIR

Я не могу найти документацию по этой проблеме, действительно не могу понять, в чем проблема, поскольку я знаю, что Adobe Air используетWebKit для просмотра веб-страниц, таких как Chrome и Safari, но только в воздушном приложении этот код не работает.

Надеюсь, кто-нибудь может мне помочь.

Спасибо!

Ответы [ 3 ]

1 голос
/ 11 января 2012

Мое приложение - это в основном HTML-сайт в Dreamweaver с флэш-заставками и связанной навигацией между 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>

И это работает. Для моего приложения оно работает во всех браузерах, а также в качестве настольного приложения AIR для Mac и Windows. Я просто пробираюсь в воздух, но я подумал, что это поможет тебе решить твою проблему.

0 голосов
/ 27 сентября 2011

В приложениях AIR это «песочницы», основанные на том, откуда загружается контент. Ваше основное приложение находится в «изолированной программной среде», а удаленно загруженный контент - в «изолированной программной среде». Каждая песочница ограничена тем, что она может делать.

Контент в каждой песочнице не может общаться с контентом в другой песочнице без моста. Поскольку вы загружаете свой iframe с удаленным содержимым, ваш HTML-файл приложений-песочниц, который пытается получить к нему доступ, вероятно, ограничен.

Я думаю, вам нужно заглянуть в то, что называется мостом из песочницы. В частности, мост песочницы родитель-ребенок.

Я сделал презентацию об этом один раз. Слайды доступны в моем блоге. , Я бы дал вам прямую ссылку, но я на своем телефоне. Просто найдите AIR Security или CFUnited 2010.

0 голосов
/ 27 сентября 2011

Я чувствую, что вы перепутали несколько понятий.Поэтому я постараюсь помочь.

Во-первых, утверждение: «все страницы находятся в одном домене»

В приложении 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.

Создание настольных приложений сильно отличается от создания веб-приложений.И полагаясь только на на HTML и JS, возникают некоторые проблемы.Вы теряете много преимуществ серверного решения, такого как PHP или ColdFusion.Там нет хранилища сеансов, нет файлов cookie (кроме доступа к удаленным службам), нет параметров URL и т. Д.

Тем не менее, вы получаете много дополнительных преимуществ в AIR.У вас есть доступ к локальной файловой системе, вы получаете зашифрованное локальное хранилище, вы не ограничены политикой браузера того же происхождения, вы можете использовать локальную базу данных (даже зашифрованную) и многое другое.

Если вам действительно нужно просматривать и отображать файлы PHP изнутри iframe в AIR и вам нужна кнопка «назад» и «вперед», тогда вам нужно будет разместить PHP где-нибудь удаленно (или иметь все вашипользователи устанавливают его локально), и вам нужно, чтобы этот iframe вызывал страницу удаленно.Затем я подозреваю, что history.back () сработает.

Вы можете создать свои собственные функции возврата / пересылки, просто сохраняя историю просматриваемых страниц, используя один из множества вариантов локального хранилища AIR (ELS, StorageObject,SQLite, File System), а затем реализуйте кнопки «назад» и «вперед», которые используют эти хранилища для перезагрузки содержимого.Но я думаю, что лучшим вариантом будет просто иметь качественную навигацию в вашем приложении.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...