2015-05-22 4 views
2

я не могу показаться, чтобы принести новые данные в Internet Explorer 9. Для примера я проверить магазину таким образом:store.find в IE9 не работает

App.__container__.lookup('store:main').find('style')

Единственная ошибка Я получаю следующий:

SCRIPT5022: Error: Assertion Failed: [object Object]

ли Эмбер-данных работает из коробки (без polyfills, ...) в Internet Explorer 9?

версии:

  • Эмбер: 1.9.1
  • Ember-данные: 1.0.0-beta.12
+0

Моя догадка вам нужно просто ES5 shim но w/out немного больше информации, это трудно сказать наверняка (также ED до бета-версии 16+ теперь я думаю, что это может стоить того).Если вы замаскируете ошибку в инструментах разработчика IE9, можете ли вы получить строку # или законную стекцию, чтобы прикрыть реальную проблему внутри данных ember? –

+0

Это замечательная вещь в Internet Explorer 9, она показывает мне только значок ошибки, но нет сообщения или возможности увидеть стек. Вот почему мне было интересно, что Ember-данные нуждаются в некоторой специальной прокладке или полифиллере для работы в Internet Explorer. Я также попытался добавить прокладку ES5, но это не имело никакого значения. – Hoetmaaiers

+0

Вы получаете ту же ошибку с IE8 или нет? Я нашел использование virtualbox и IE8, чтобы я мог видеть строку # (в режиме разработки), а затем я мог бы запросить тот же файл локально (на моей машине dev) с помощью chrome и вытащить файл vendor.js или любой другой файл js, чтобы увидеть строка кода, которая умерла. Это опция/любая другая информация, которую вы можете получить? –

ответ

2

Проблема решена. При выполнении запроса AJAX с помощью jQuery это обычно происходит через объект XMLHttpRequest.

На IE8-9 этого объекта нет, вместо этого он использует XDomainRequest. Простейшим решением для этого является добавление: https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest.

0

уголек-данных работает из коробки с IE8 +. По this issue:

Мы с поддержкой IE8 с нашей платформой (построен на Ember) для в то время как в настоящее время. Вещи, которые я знаю:

  • Прокладка/обман не требуется, она заполняется Ember и Ember-Data.
  • Вы будете нуждаться в этом, если вы хотите дополнительные вещи, как .bind() на функцию, то вы должны указать его в файл поставщика (с помощью Brocfile) и мы включаем только подкладку для этой цели, а не притворство
0

Решение Синтез

Причина:

На IE8-9, этот объект не присутствует, вместо этого он использует XDomainRequest.

Решение:

Проблема решена. При использовании запроса AJAX с jQuery. Обычно это делается через объект XMLHttpRequest. Простое исправление было бы с помощью Open-Source jQuery-ajaxTransport-XDomainRequest

Код: Добавление:

JQuery-ajaxTransport-XDomainRequest.js

/*! 
* jQuery-ajaxTransport-XDomainRequest - v1.0.4 - 2015-03-05 
* https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest 
* Copyright (c) 2015 Jason Moon (@JSONMOON) 
* Licensed MIT (/blob/master/LICENSE.txt) 
*/ 
(function(factory) { 
    if (typeof define === 'function' && define.amd) { 
    // AMD. Register as anonymous module. 
    define(['jquery'], factory); 
    } else if (typeof exports === 'object') { 
    // CommonJS 
    module.exports = factory(require('jquery')); 
    } else { 
    // Browser globals. 
    factory(jQuery); 
    } 
}(function($) { 

// Only continue if we're on IE8/IE9 with jQuery 1.5+ (contains the ajaxTransport function) 
if ($.support.cors || !$.ajaxTransport || !window.XDomainRequest) { 
    return $; 
} 

var httpRegEx = /^(https?:)?\/\//i; 
var getOrPostRegEx = /^get|post$/i; 
var sameSchemeRegEx = new RegExp('^(\/\/|' + location.protocol + ')', 'i'); 

// ajaxTransport exists in jQuery 1.5+ 
$.ajaxTransport('* text html xml json', function(options, userOptions, jqXHR) { 

    // Only continue if the request is: asynchronous, uses GET or POST method, has HTTP or HTTPS protocol, and has the same scheme as the calling page 
    if (!options.crossDomain || !options.async || !getOrPostRegEx.test(options.type) || !httpRegEx.test(options.url) || !sameSchemeRegEx.test(options.url)) { 
    return; 
    } 

    var xdr = null; 

    return { 
    send: function(headers, complete) { 
     var postData = ''; 
     var userType = (userOptions.dataType || '').toLowerCase(); 

     xdr = new XDomainRequest(); 
     if (/^\d+$/.test(userOptions.timeout)) { 
     xdr.timeout = userOptions.timeout; 
     } 

     xdr.ontimeout = function() { 
     complete(500, 'timeout'); 
     }; 

     xdr.onload = function() { 
     var allResponseHeaders = 'Content-Length: ' + xdr.responseText.length + '\r\nContent-Type: ' + xdr.contentType; 
     var status = { 
      code: 200, 
      message: 'success' 
     }; 
     var responses = { 
      text: xdr.responseText 
     }; 
     try { 
      if (userType === 'html' || /text\/html/i.test(xdr.contentType)) { 
      responses.html = xdr.responseText; 
      } else if (userType === 'json' || (userType !== 'text' && /\/json/i.test(xdr.contentType))) { 
      try { 
       responses.json = $.parseJSON(xdr.responseText); 
      } catch(e) { 
       status.code = 500; 
       status.message = 'parseerror'; 
       //throw 'Invalid JSON: ' + xdr.responseText; 
      } 
      } else if (userType === 'xml' || (userType !== 'text' && /\/xml/i.test(xdr.contentType))) { 
      var doc = new ActiveXObject('Microsoft.XMLDOM'); 
      doc.async = false; 
      try { 
       doc.loadXML(xdr.responseText); 
      } catch(e) { 
       doc = undefined; 
      } 
      if (!doc || !doc.documentElement || doc.getElementsByTagName('parsererror').length) { 
       status.code = 500; 
       status.message = 'parseerror'; 
       throw 'Invalid XML: ' + xdr.responseText; 
      } 
      responses.xml = doc; 
      } 
     } catch(parseMessage) { 
      throw parseMessage; 
     } finally { 
      complete(status.code, status.message, responses, allResponseHeaders); 
     } 
     }; 

     // set an empty handler for 'onprogress' so requests don't get aborted 
     xdr.onprogress = function(){}; 
     xdr.onerror = function() { 
     complete(500, 'error', { 
      text: xdr.responseText 
     }); 
     }; 

     if (userOptions.data) { 
     postData = ($.type(userOptions.data) === 'string') ? userOptions.data : $.param(userOptions.data); 
     } 
     xdr.open(options.type, options.url); 
     xdr.send(postData); 
    }, 
    abort: function() { 
     if (xdr) { 
     xdr.abort(); 
     } 
    } 
    }; 
}); 

return $; 

})); 
Смежные вопросы