2015-07-31 3 views
1

я обращенную следующий странный вопрос:Окно OnLoad событие не срабатывает в Ipad ИОС 8.4

Функциональность:
Когда я открываю страницу сайта, которая имеет много изображений и иметь JavaScript/JQuery используется для функциональных возможностей на стороне клиента , При нажатии каждого изображения все остальные изображения меняют свою непрозрачность, а на выбранном изображении отображается <div>, содержащая некоторую информацию и видео для изображения.

  1. Я использовал jquery unveil, который загружает все изображения только после того, как на странице запущено событие прокрутки. До этого он отображает «загружаемое» изображение.
  2. Я добавил javascipt на window.onload событие для изменения размера элемента <div> при щелчке по изображению. И некоторый javascript, который идентифицирует браузер и устанавливает источник видеотеки соответственно.
  3. Все изображения визуализируются внутри datalist и привязаны к базе данных.
  4. Как изображение загружает изображение только после события прокрутки, я добавил код на загрузку страницы для искусственного прокрутки страницы с помощью пикселя.

Проблема:
открыть ту же страницу в IPad (IOS 8,4) на хроме или сафари. Все мои javascript под window.onload не срабатывает.

ASPX страница:

<script type="text/javascript" src="/js/jquery.unveil.js"></script> 
<asp:DataList ID="dlPersonList" runat="server" OnItemDataBound="dlPersonList_OnItemDataBound" 
RepeatDirection="Horizontal" RepeatLayout="Flow"> 
    <ItemTemplate> 
    <div class="itemImage"> 
     <asp:HyperLink ID="hypPersonPicture" runat="server"> 
      <asp:Image ID="imgPersonPicture" runat="server" CssClass="lazy" /> 
     </asp:HyperLink> 
    </div> 
    <asp:Panel class="person-detail" ID="pnlpersonDetail" runat="server"> 
     <div class="person-content detailView"> 
     <%--Some text and other controls--%>   
     <asp:Panel ID="pnlVideo" runat="server"> 
      <div class="video-content"> 
        <video id="personVideo" controls="controls" preload="none"> 
         <%--Video source elements--%> 
        </video> 
      </div> 
     </asp:Panel> 
     </div> 
    </asp:Panel> 
    </ItemTemplate> 
</asp:DataList> 

CS код:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //Bind data list 
     dlPersonList.DataSource = SelectPersons(); 
     dlPersonList.DataBind(); 
     // Register the script for slide up effect    
     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "scriptPerson", @"$(document).ready(function() { 
                 jWDScrollWindow();});", 
                 true); 
    } 
} 
protected void dlPersonList_OnItemDataBound(Object sender, DataListItemEventArgs e) 
{ 
    /*Lazy loading functionality*/ 
    //Set the image source as loader image 
    imgPersonPicture.Attributes.Add("src", "/img/loading.gif"); 
    //set image resource as actual image 
    imgPersonPicture.Attributes.Add("data-src", imageObject.ImagePath.TrimStart('~')); 
} 

JS код:

window.onload = function() { 
    //Apply lazy loading functionality to images 
    $(".lazy").unveil(); 
    //Javascript to set the width and height of the details div 
    . 
    . 
    //Javascript to blur all the other images when one image is clicked 
} 
function jWDScrollWindow() { 
    //scroll by 1px to load the images 
    $(window).scrollTop($(window).scrollTop() + 1); 
} 

Вещи, которые я попробовал еще:

  1. Я думал, JQuery представить, возможно, делает страницу медленно или что-то. поэтому я удалил вызов, но проблема в том, что unveil(); вызывается в пределах window.onload. Таким образом, если window.onload не запускается, он не делает каких-либо проблем для удаления рассылки.
  2. Я добавил предупреждение() на window.onload(), но в этом случае все работает отлично.

Все функциональные возможности отлично работает на всех устройствах, кроме IPad с прошивкой 8.4 (она прекрасно работает даже в более ранних ОС)

Помощь/Suggessions очень ценятся.

EDIT:
Я нашел один jsconsole, через которую мы можем увидеть журналы консоли в IPad на рабочем столе. Here - как мы можем его использовать.
Я проверил журналы и обнаружил, что, когда я получаю ошибку JQMIGRATE: jQuery.browser is deprecated, My window.onload событие не срабатывает. Принимая во внимание, что если я получаю журнал JQMIGRATE: Logging is active, все работает нормально. Моя jqmigrate ссылки на главной странице, как,

<script type="text/javascript" async src='/js/jquery-migrate-1.1.1.js'></script> 
+0

'Как обнародует загружает изображение только после того, как событие прокрутки, я добавил код на странице загрузке для прокрутки страницы с помощью пиксельной artificially.' Почему бы не просто запустить событие прокрутки ??? –

+1

'Я добавил alert() в window.onload(), но в этом случае все работает отлично, звучит как асинхронная проблема, запускается окно onload перед запуском скрипта' unveil'. Любая ошибка в консоли? Вы включаете скрипт после загрузки документа? Я спрашиваю об этом, но если я, это должно быть проблемой во всех браузерах/ОС, если сценарий не кэширован –

+0

@ A.Wolff: 1. Я вызвал событие прокрутки (обновляется в вопросе) 2. Есть ли способ проверить консоль в iPad? в любом браузере на рабочем столе нет ошибок. –

ответ

5

Я тоже недавно столкнулся с этой проблемой. Похоже, подобная ситуация с твоей Шубхэмом.

TL; DR:

Различные варианты iOS8 кажется, чтобы предотвратить окно OnLoad от стрельбы, если <audio> или <video> тег содержит атрибут preload="none" (и, возможно, другие варианты)

Это не имеет никакого смысла я рассматриваю как предварительную загрузку «none», на самом деле НЕ должен пытаться загружать медиаданные, поэтому почему это мешает окну загружать?

Дальнейшее объяснение:

В/WooCommerce сайт Wordpress, что я помогал строить, клиент имел несколько сотрудников ALL с iPhone прошивкой 8.4.1. Три с iPhone 5 и один с iPhone 6. У двух из них с iPhone 5 были проблемы, у другого пользователя iPhone 5 и у пользователя iPhone 6 такая проблема не возникала, поэтому я предположил, что проблема связана с порядком/скоростью, с которой некоторые jQuery плагины могут быть загружены.

Симптомы были такими, как мобильная навигация, которая должна расширяться/сокращаться, а функция поиска AJAX не удалась для этих пользователей и не функционировала вообще, но все другие браузеры/настольные компьютеры/Android были в порядке.

Сайт продает аудиопродукцию, многие из которых имеют аудио-превью. После некоторых (лотов!) Тестирования я понял, что пользователи не имеют этой проблемы, если на странице БЕЗ аудио-тега.

Так что я искал на iOS8, окна OnLoad и аудио ошибка и я нашел эти две маленьких жемчужины, которые содержали комментарии, связанные с аудио проблем на различные версии прошивки:

http://themeforest.net/forums/thread/ios8-safari-breaks-windowload-info-for-authors/147825?page=1&message_id=1154236#1154236 (пользователь «tommusrhodus ")

Если у вас есть какие-либо или теги на вашей странице, то в настоящее время он будет разорван в сафари iOS8, который никогда не запускает событие window.onload, если эти теги присутствуют в DOM.

https://github.com/codevise/pageflow/issues/118 (пользователь «lufes»):

Проблема связана с событием window.onload, которые не срабатывают, если есть видео или аудио с натягом = атрибут «нет» задавать. window.onload будет запускаться после загрузки каждого актива, а iOS 8 продолжает ждать загрузки видео, чего никогда не будет.

Таким образом, решение для меня - потому что я не хочу, чтобы взломать ядро ​​Wordpress - было просто удалить атрибут преднагрузки вообще с помощью JQuery в готовом обратного вызова, которая будет стрелять перед окном OnLoad как:

$("audio").removeAttr("preload"); 
+1

Спасибо @meerkatlookout, ваше решение имеет смысл. Я определенно попробую это. Но в моем случае у меня есть много (около 10) видео на странице, которые раньше загружались на загрузку страницы, поэтому я добавил 'preload = none', чтобы загрузить видео только тогда, когда пользователь нажимает на него. –

+1

Спасибо! Странно, я вижу это на 8.3, но работает нормально на устройстве iOS 9.1. – NoBugs

0

Я counldn't найти причину, почему контроль не срабатывает window.onload события. Но для тех, кто попадет в ту же проблему, я отправляю здесь другой путь, чтобы решить эту проблему. (И, очевидно, я не хочу, чтобы получить tumbleweed знак ..)

  1. я добавил большую часть JavaScript в коде (CS-файл), который был внутри window.onload
  2. Как я называю яваскрипт функцию jWDScrollWindow() на чтобы прокрутить страницу, я добавил $(".lazy").unveil(); внутри самой функции jWDScrollWindow().

Это решает проблему в iPad, но изменения не являются специфичными для устройства.

function jWDScrollWindow() { 
    //Apply lazy loading functionality to images 
    $(".lazy").unveil(); 
    //scroll by 1px to load the images 
    $(window).scrollTop($(window).scrollTop() + 1); 
} 

Это не полноценное решение проблемы, а в работе aournd. Если у кого-то есть причина или решение по этой проблеме, пожалуйста, отправьте сообщение в качестве ответа.

1

Существует также обходной путь:

var iOS8 = navigator.userAgent.match(/(iPad|iPhone|iPod).*OS 8_\d/i); 
if(iOS8){ 
    setTimeout(function(){ 
     $(window).trigger('load'); 
    }, 3500); 
} 

Это вызовет нагрузку, и симулировать 'Сафари на iOS8 думать, что был загружен $(window) объект, так что код внутри

$(window).on('load', function()); 

будет работать.

Надеется, что это помогает любому, кто ищет это :)

 Смежные вопросы

  • Нет связанных вопросов^_^