how - habilitar javascript en internet explorer 11
¿Qué causa el error "No se puede ejecutar el código de un script liberado" (12)
A partir de IE9 comenzamos a recibir este error al llamar .getTime () en un objeto Date almacenado en una matriz dentro de otro objeto. La solución fue asegurarse de que fuera una fecha antes de llamar a los métodos de fecha:
Fail: rowTime = wl.rowData[a][12].getTime()
Pase: rowTime = new Date(wl.rowData[a][12]).getTime()
Pensé que había encontrado la solución hace un tiempo (ver mi blog ):
Si alguna vez obtiene el error de JavaScript (o debería ser JScript) "No se puede ejecutar el código de un script liberado", intente mover las metaetiquetas del encabezado para que estén antes de las etiquetas del script.
... pero en función de uno de los comentarios de blog más recientes, la solución que sugerí podría no funcionar para todos. Pensé que sería una buena forma de abrirse a la comunidad de StackOverflow ...
¿Qué causa el error "No se puede ejecutar el código de un script liberado" y cuáles son las soluciones / soluciones?
Aquí hay un caso muy específico en el que he visto este comportamiento. Es reproducible para mí en IE6 e IE7.
Desde dentro de un iframe:
window.parent.mySpecialHandler = function() { ...work... }
Luego, después de volver a cargar el iframe con contenido nuevo, en la ventana que contiene el iframe:
window.mySpecialHandler();
Esta llamada falla con "No se puede ejecutar código desde una secuencia de comandos liberada" porque mySpecialHandler se definió en un contexto (el DOM original del iframe) que ya no existe. (Recargar el iframe destruyó este contexto).
Sin embargo, puede establecer con seguridad valores "serializables" (primitivas, gráficos de objetos que no hacen referencia directamente a las funciones) en la ventana principal. Si realmente necesita una ventana separada (en mi caso, un iframe) para especificar algún trabajo en una ventana remota, puede pasar el trabajo como una cadena y "evaluarlo" en el receptor. Tenga cuidado con esto, generalmente no hace una implementación limpia o segura.
En la actualización de src de iframe, estoy obteniendo ese error.
Obtuve ese error accediendo a un evento (haga clic en mi caso) de un elemento en la ventana principal como este (llamando a la ventana principal / más externa directamente):
top.$("#settings").on("click",function(){
$("#settings_modal").modal("show");
});
Lo cambié así y funciona bien (llamando al padre del padre de la ventana del iframe):
$(''#settings'', window.parent.parent.document).on("click",function(){
$("#settings_modal").modal("show");
});
Mi iframe que contiene el modal también está dentro de otro iframe.
Este error puede ocurrir en MSIE cuando una ventana secundaria intenta comunicarse con una ventana primaria que ya no está abierta.
(No es exactamente el texto de mensaje de error más útil del mundo).
Esto no es realmente una respuesta, sino más un ejemplo de dónde sucede esto precisamente.
Tenemos el cuadro A y el cuadro B (esta no era mi idea, pero tengo que vivir con ella). El fotograma A nunca cambia, el fotograma B cambia constantemente. No podemos aplicar cambios de código directamente en el marco A, por lo que (según las instrucciones del proveedor) solo podemos ejecutar JavaScript en el fotograma B, el fotograma exacto que cambia constantemente.
Tenemos un fragmento de JavaScript que debe ejecutarse cada 5 segundos, por lo que el JavaScript del cuadro B crea una nueva etiqueta de script y se inserta en la sección principal del cuadro B. SetInterval existe en estos nuevos scripts (el que se inyectó), como así como la función de invocar. Aunque el marco A cargó técnicamente el JavaScript inyectado (ya que ahora contiene la etiqueta del script), una vez que el fotograma B cambia, la función ya no es accesible por setInterval.
Me encontré con este problema cuando, dentro de un marco secundario, agregué un tipo de referencia a la ventana de nivel superior e intenté acceder a él después de que la ventana secundaria se recargó
es decir
// set the value on first load
window.top.timestamp = new Date();
// after frame reloads, try to access the value
if(window.top.timestamp) // <--- Raises exception
...
Pude resolver el problema usando solo tipos primitivos
// set the value on first load
window.top.timestamp = Number(new Date());
Obtiene este error cuando llama a una función que se creó en una ventana o marco que ya no existe.
Si no sabe de antemano si la ventana aún existe, puede intentar / detectar para detectarla:
try
{
f();
}
catch(e)
{
if (e.number == -2146823277)
// f is no longer available
...
}
Obtuve este error en DHTMLX al abrir un diálogo y una identificación principal o una identificación de ventana actual no encontrada
$(document).ready(function () {
if (parent.dxWindowMngr == undefined) return;
DhtmlxJS.GetCurrentWindow(''wnManageConDlg'').show();
});
Solo asegúrese de que está enviando el id. De ventana curr / principal correcto al abrir un diálogo
Obtuve este error en IE9 dentro de una página que eventualmente abre un iFrame. Siempre que el iFrame no esté abierto, podría usar localStorage. Una vez que el iFrame se abrió y cerró, ya no pude usar el localStorage debido a este error. Para solucionarlo, tuve que agregar este código en el Javascript que estaba dentro del iFrame y también usar localStorage.
if (window.parent) {
localStorage = window.parent.localStorage;
}
Parece que ha accedido a un error / problema en la forma en que se manejan algunas etiquetas o que tiene referencias a objetos lanzados en los que está tratando de ejecutar métodos.
Primero movería cualquier etiqueta <meta>
antes de cualquier etiqueta <script>
como se sugiere here y en muchos otros lugares.
Luego verifique si tiene problemas de página / seguridad discutidos here .
Si intenta acceder al objeto JS, la forma más fácil es crear una copia:
var objectCopy = JSON.parse(JSON.stringify(object));
Espero que ayude
El error se produce cuando la ventana de script ''principal'' está dispuesta (es decir, cerrada) pero se invoca una referencia a la secuencia de comandos que aún se mantiene (como en otra ventana). Aunque el ''objeto'' aún está vivo, el contexto en el que quiere ejecutarlo no.
Está algo sucio, pero funciona para mi Gadget de Windows Sidebar:
Aquí está la idea general: la ventana ''principal'' establece una función que evaluará algún código, sí, es así de feo. Entonces un ''niño'' puede llamar a esta "función de constructor" (que está / limitada al alcance de la ventana principal /) y recuperar una función que también está vinculada a la ventana ''principal''. Una desventaja obvia es, por supuesto, que la función de ''rebote'' no puede cerrar el alcance que aparentemente se define en ... de todos modos, basta de farfullar:
Esto es parcialmente seudocódigo, pero utilizo una variante del mismo en un accesorio de la barra lateral de Windows (sigo diciendo esto porque los gadgets de la barra lateral se ejecutan en la "zona 0 no restringida", lo que puede cambiar el escenario o no).
// This has to be setup from the main window, not a child/etc!
mainWindow.functionBuilder = function (func, args) {
// trim the name, if any
var funcStr = ("" + func).replace(/^function/s+[^/s(]+/s*/(/, "function (")
try {
var rebuilt
eval("rebuilt = (" + funcStr + ")")
return rebuilt(args)
} catch (e) {
alert("oops! " + e.message)
}
}
// then in the child, as an example
// as stated above, even though function (args) looks like it''s
// a closure in the child scope, IT IS NOT. There you go :)
var x = {blerg: 2}
functionInMainWindowContenxt = mainWindow.functionBuilder(function (args) {
// in here args is in the bound scope -- have at the child objects! :-/
function fn (blah) {
return blah * args.blerg
}
return fn
}, x)
x.blerg = 7
functionInMainWindowContext(6) // -> 42 if I did my math right
Como variante, la ventana principal debería poder pasar la función functionBuilder a la ventana secundaria, ¡siempre que la función functionBuilder esté definida en el contexto de la ventana principal!
Siento que usé demasiadas palabras. YMMV.