Jquery mobile: перенаправить на другую страницу перед загрузкой - PullRequest
12 голосов
/ 22 февраля 2012

использую jquery mobile 1.0

Я хочу перенаправить с first.html на otherPage.html без показа содержимого first.html

$("#pageId").live("pagebeforecreate", function(event) {                 

  window.location.href = "otherPage.html";              

});

- я пробовал почти каждое событие, но безуспешно. first.html отображается на мгновение.

Затем я попытался с событием pagebeforeload, но оно не сработало

$( document ).bind( "pagebeforeload", function( e, data ){ 

        console.log("pagebeforeload starting"); // NO LOGGING HAPPENING 
        window.location.href = "otherPage.html";

        e.preventDefault(); 

        data.deferred.resolve( data.absUrl, data.options, response.page); 

}); 

$( document ).bind( "pageload", function( e, data ){
    console.log("Page successfully loaded into DOM..."); // NO LOGGING HAPPENING 
});

- Я не совсем ясно об этом событии и не нашел подходящего примера для него.-Могу кто-нибудь, пожалуйста, помогите!

Ответы [ 7 ]

12 голосов
/ 13 апреля 2012


Попробуй это

$("#firstPageId").live("pagecreate",function(){
         $.mobile.changePage("otherPage.html");
});

Также можно использовать loadPage

Надеюсь, это поможет:)

4 голосов
/ 22 февраля 2012

Событие pagebeforeload вызывается только тогда, когда внешние страницы загружаются в:

Всякий раз, когда внешняя страница загружается в DOM приложения, запускаются 2 события.Первый - это pagebeforeload.Второе событие будет либо pageload, либо pageloadfailed.

Моя единственная идея, чтобы обойти это, - загрузить содержимое страницы first.html асинхронно, что не идеальнопотому что вы заканчиваете тем, что сделали 2 запроса http для той же самой страницы.Однако это даст вам возможность вызывать first-contents.html только в случае необходимости, в противном случае вы можете перенаправить на otherPage.html , не показывая ничего.Например:

<script>
    someCondition=true;
    if(someCondition) {
        window.location.href = "otherPage.html"; 
    } else {
        $(document).ready(function() {
            $('body').load('first-content.html', function() {
                //other stuff after the contents have loaded: like the rest of your jquery relating to first.html
            });
        });
    }
</script>

Убедитесь, что теги body на странице first.html не заполнены.

1 голос
/ 28 февраля 2012

Попробуйте использовать это:

<head> 
    <script>
        window.location.replace('otherPage.html');
    </script> 
</head>
1 голос
/ 22 февраля 2012

Трудно сказать, чего вы пытаетесь достичь.Как и состояния Endophage, вы можете выполнить простое перенаправление JavaScript, если все, что вам нужно, это перейти на другую страницу.

Я предполагаю, что вы хотите иметь возможность выбрать, отображать ли содержимое первогоили вторая страница, но все еще остаются на первой странице.

Вы можете добавить следующий код.Убедитесь, что вы добавили до , включив jquery.mobile.

<script>
    $(document).bind('mobileinit', function () {
        // disable autoInitialize
        $.mobile.autoInitializePage = false;
    });
    $(function () {
        var displaySecondPage = true;
        if (displaySecondPage) {
            // load page2.html and replace #page1 with contents of #page2 on page2.html
            $('#page1').replaceWith($('<div />').load('page2.html #page2', function() {
                // continue initialize
                $.mobile.initializePage();
            }));
        }
        else {
            // continue initialize
            $.mobile.initializePage();                
        }
    });
</script>

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

Теперь мы можем использовать стандартный готовый обработчик jQuery для проверки нашего условия, и если true, загрузить содержимое page2.html и заменить #page1 страницаОбратите внимание, что я использую метод $.load с синтаксисом фрагмента страницы.Это означает, что вам нужно знать идентификатор страницы, которую вы хотите загрузить.

После загрузки страницы вы можете позвонить $.mobile.initializePage, чтобы разрешить jquery mobile отображать новую страницу.

Чтобы предотвратитьсодержимое первой страницы, отображаемой во время этой загрузки, я добавляю следующий CSS в мою таблицу стилей:

div[data-role='page'] {
  display: none;
}

jQuery Mobile заботится об отображении и скрытии страниц, поэтому их скрытие по умолчанию обеспечит вамне получайте флэш-контент необработанного контента.

В любом случае, надеюсь, это поможет.

1 голос
/ 22 февраля 2012

Вы пытались просто не использовать событие. Код JS будет выполняться так, как он встречается, поэтому достаточно убедиться, что ваш условный код находится вверху страницы (где-то в заголовке).

<html>
<head>
<script>
  if (condition)
  {
    window.location.href = "otherPage.html";
  }
</script>
<!-- rest of page -->
0 голосов
/ 25 июля 2013

Так как кажется, что есть очень ответы на это; особенно если вы используете многостраничный шаблон. Вот ссылка на ответ в мобильных формах jquery, который работает, вставляя тег # в URL перед страницей init

jquery forum answer

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

0 голосов
/ 13 мая 2013

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

Теперь, с помощью jquery mobile 1.3, вы можете просто установить data-url на <div data-role="page" data-url="..."> на целевой странице. JQM обнаружит это и обновит URL-адреса соответственно.

Подробнее здесь http://jquerymobile.com/demos/1.0rc2/docs/pages/page-links.html

И даже некоторая демонстрация здесь http://jquerymobile.com/demos/1.3.0-beta.1/docs/demos/redirect/index.html

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