Подтвердить что ты не робот

JQuery mobile: перенаправление на другую страницу перед загрузкой

am с помощью jquery mobile 1.0

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

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

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

});

-i пытался почти каждое событие, но не удалось. 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 
});

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

4b9b3361

Ответ 1


Попробуйте этот

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

Кроме того, вы можете использовать loadPage

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

Ответ 2

Событие 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>

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

Ответ 3

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

<html>
<head>
<script>
  if (condition)
  {
    window.location.href = "otherPage.html";
  }
</script>
<!-- rest of page -->

Ответ 4

Трудно сказать, чего вы пытаетесь достичь. Как и состояния 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, загрузите содержимое страницы2.html и замените страницу #page1. Заметьте, что я использую метод $.load с синтаксисом фрагмента страницы. Это означает, что вам нужно знать идентификатор страницы, который вы хотите загрузить.

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

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

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

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

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

Ответ 5

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

<head> 
    <script>
        window.location.replace('otherPage.html');
    </script> 
</head>

Ответ 6

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

Теперь, используя jquery mobile 1.3, вы можете просто установить 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

Ответ 7

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

ответ jQuery форума

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