2016-02-26 3 views
0

Мы заметили очень странное поведение в IE11 при запуске приложения Aurelia. Это происходит только в том случае, если вы впервые запускаете приложение в новом окне/курсе И курсор мыши НЕ находится в области окна IE (например, программа запускается из командной строки с заданным URL-адресом, что является важным для нас сценарием). Затем приложение остается на index.html со статическим содержимым, но ничего не происходит. Пока вы не перемещаете курсор над окном ... Затем магическое приложение продолжается без ошибок и любых проблем.IE11 обещают странное поведение

Насколько я могу отлаживать, проблема возникает, когда скрипт вводит обещание System.import ('core-js'). Это происходит с или без использования обещания синей птицы.

Это тело из "index.html".

<script src="jspm_packages/system.js"></script> 
<script src="config.js"></script> 
<script> 
    System.import('core-js').then(function() { 
    return System.import('webcomponents.js/MutationObserver'); 
    }).then(function() { 
    return System.import('aurelia-bootstrapper'); 
    }); 
</script> 

EDIT:

Я заметил, что помогает это поставить обещание с тайм-аут (по крайней мере, 1000 мс). Есть ли у вас идеи, существует ли какое-либо лучшее решение?

<script src="jspm_packages/npm/[email protected]/js/browser/bluebird.js"></script> 
<script src="jspm_packages/system.js"></script> 
<script src="config.js"></script> 
<script> 
    // IE11 hack for mutation observer/promises error 
    var promise = new Promise(function (resolve) { 
     window.setTimeout(
      function() { 
       resolve(); 
      }, 1000); 
    }); 

    System.import('core-js').then(function() { 
     return System.import('webcomponents.js/MutationObserver'); 
    }).then(function() { 
     return System.import('aurelia-bootstrapper'); 
    }); 
</script> 
+0

Звучит как неприятная небольшая ошибка. Вы можете принудительно инициализировать, инициируя событие mouseover (например, при загрузке страницы), но затем следите за тем, чтобы он не запускался дважды (безопасность, вероятно, уже на месте, но вам нужно убедиться). –

ответ

0

Вот обходной путь для ошибки, которая вызвана IE11 поведения мутации наблюдателя w.r.t планирования. Это обходное решение работает с bluebird, но не с другими полигонами:

// use timers for scheduling 
Promise.setScheduler(function(fn) { setTimeout(fn); }); 
+0

Спасибо за ваше решение, однако в этом случае это не сработает :(Кажется, что system.js меняет объект Promise, потому что после импорта скрипта system.js функция Promise.setScheduler становится неопределенной, и мне нужно использовать обещания после импорта этот пакет. Вы знаете, как я могу это сделать? – Saadh

+0

Да, импортируйте синюю птицу как обещание вручную. –

+0

Я не уверен, что вы имеете в виду, можете ли вы привести пример? – Saadh

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