javascript - language - No se puede cargar Google Cloud Endpoints en Internet Explorer 10
r for linux download (3)
Estoy trabajando en un sitio web que utiliza la Biblioteca de clientes de JavaScript de Google para cargar algunas API que están expuestas a través de Google Cloud Endpoints . Los puntos finales se desarrollaron en Python, pero no estoy seguro de si eso es un factor. Todo funciona muy bien en Chrome, Firefox y Safari, pero en Internet Explorer 10 aparece este error:
SCRIPT5007: Unable to get property ''value'' of undefined or null reference
proxy.html, line 7 character 51
Estoy cargando la biblioteca del cliente usando un código similar al sugerido por Google en su documentación :
<script type="text/javascript">
Oversee.Init();
function init() {
console.log("starting to load endpoints");
gapi.client.load("marketplace", "1", function() {
console.log("finished loading endpoints");
}, "//" + window.location.host + "/_ah/api");
}
</script>
<script type="text/javascript" src="https://apis.google.com/js/client.js?onload=init"></script>
Esto genera lo siguiente en la consola:
starting to load endpoints
SCRIPT5007: Unable to get property ''value'' of undefined or null reference
proxy.html, line 7 character 51
Tenga en cuenta que la línea "terminada la carga de los puntos finales" nunca sale.
Después de imprimir bastante, el código en cuestión en proxy.html parece ser este, específicamente el valor document.getElementById(''root'').value
, Como document.getElementById(''root'')
es nulo o indefinido.
gapi.load(''googleapis.proxy'', {
callback: function () {
return window[''googleapis''][''server''][''initWithPath'']
.call(this, document.getElementById(''root'').value);
},
config: {
// snipped
}
});
Me he dado cuenta de que si vuelvo a cargar la página, la API se carga correctamente, con el siguiente resultado en la consola:
starting to load endpoints
finished loading endpoints
Todo lo anterior sucede tanto cuando uso el servidor de desarrollo local como cuando uso la aplicación alojada en las instancias de producción de Google App Engine.
¿Alguien ha logrado llamar exitosamente a Google Cloud Endpoints desde Internet Explorer 10? Si es así, ¿qué me estoy perdiendo en mi código?
EDITAR: El problema también está sucediendo con la aplicación web de ejemplos de Cloud Endpoints de Google . Implementé una copia aquí: https://cloud-endpoints-demo.appspot.com , y se produce el mismo error al ejecutarlo en Internet Explorer 10.
EDIT 2: Creé un problema aquí: https://code.google.com/p/googleappengine/issues/detail?id=10700
EDIT 3: El problema también ocurre en el ejemplo de TicTacToe de Google para los puntos finales de la nube . Implementé una copia aquí: https://cloud-endpoints-tictactoe.appspot.com ; al igual que con la otra demostración, funciona muy bien en Chrome y Safari, pero falla de la misma manera con Internet Explorer 10.
EDIT 4: Eché un vistazo más de cerca al proxy.html que Google sirve. Debajo de la etiqueta del script que causa el error, existe este cuerpo, que incluye un área de texto con id ''root'':
<body>
<textarea id="root" style="display:none">/_ah/api</textarea>
<div id="lcsclient" style="position:absolute;left:-10000px;"></div>
</body>
Entonces, parece que Google necesita realizar algunos cambios en proxy.html para asegurarse de que el documento se cargó antes de que el javascript se ejecute en Internet Explorer. ¿Estoy en lo cierto?
Debe ser un problema de JavaScript IE10. De acuerdo, el valor nulo debe provenir de document.getElementById(''root'')
como señaló. Su página normalmente no contendrá dicho elemento, y el nombre no es distintivo. Sospecho que el elemento ''raíz'' está destinado a ser creado por otro fragmento de JavaScript proveniente de Google, y es ese otro código JavaScript que ha fallado (silenciosamente). Aproveche su considerable Debug-Fu para mirar en esa dirección. Lo siento, me gustaría ayudar más, pero eso violaría los Términos y Condiciones de Microsoft (los de si no los pago por cada instancia, tengo prohibido ejecutar su software).
EDITAR: Dado que proxy.html contiene el código JavaScript infractor y el elemento ''raíz'', Google podría corregirlo cambiando el orden de los elementos. De manera sensata, muchos autores recomiendan ubicar el JavaScript justo antes de la parte inferior del cuerpo html. Si está en condiciones de hacer referencia a su propia copia de proxy.html, podría intentar la solución usted mismo antes de molestar a Google al respecto.
Espero que pueda ayudar:
var executeRequest = function(path, data, callback, method){
var url = ‘YOUR_API_LINK'' + path;
$.ajax({
url: url,
type: method,
dataType: ''json'',
data: data?data:null,
success: function(data, status, xhr) {
},
error: function(xhr, status, error) {
},
complete: function(xhr, status) {
var data = null;
console.log(''Request '' + url + '' completed'');
if (xhr.responseText && xhr.responseText.length > 0) {
data = $.parseJSON(xhr.responseText);
}
if (callback)
callback(data);
}
});
};
---------------
Simple call example of this function made in the same file :
---------------
var simpleGetUser = function(userKey, callback){
this.executeRequest(
''/user/v1/user/'' + userKey,
{/* If you got any parameters, put them here */},
function (res) {
if (callback)
callback(res);
}, ''GET'');
};
Buena suerte !
Tuve problemas similares al cargar las API de Google para el complemento de Google Earth en IE 10 y 11. La única resolución que hemos encontrado (aparte de que Google soluciona esto) es forzar que IE 10 se ejecute en modo IE 9. Cada versión de IE incluye los motores de renderización de las versiones principales anteriores. Puedes probar esto manualmente yendo a las herramientas de desarrollador en IE y establecer qué motor de renderización de IE quieres usar.
Puede obligar a IE a renderizar en un modo específico agregando esta metaetiqueta en su archivo html:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
TIENE que ser la primera etiqueta meta en el archivo HTML, o será ignorado por IE. Esta metaetiqueta será ignorada por otros navegadores. Sin embargo, esto hará que toda su página se renderice con el motor IE 9, por lo que pierde las capacidades presentes en IE 10 y 11. Si necesita la funcionalidad IE 10, esta solución no funcionará para usted. Si la compatibilidad con IE 9 es parte de sus requisitos, esto puede ser una solución para este problema
Este enlace tiene más información sobre los modos de compatibilidad IE