w3schools tag tab style page for color javascript jquery html windows-8 microsoft-metro

javascript - tag - title of page html



Construyendo una aplicaciĆ³n de Windows 8 Metro con jQuery (3)

Estoy empezando con el desarrollo de Windows 8 usando HTML / JS. He pasado los últimos meses inmersos en el desarrollo de jQuery para aplicaciones dirigidas a unidades centrales de vehículos y televisores.

Saltando en esto, pensé que la transición sería simple. Tengo el diseño y la estructura de mi sitio todo resuelto en su mayor parte y esperaba seguir algunas de las prácticas que había estado usando para mi trabajo anterior.

Es decir, quiero crear esencialmente una aplicación de una sola página. El archivo principal default.html alojará la navegación / título superior y otro div. El otro div se utilizará para cargar en todas las demás páginas, todos los archivos HTML separados dentro del proyecto.

Todas las funciones globales y la funcionalidad principal residirán en un archivo javascript, application.js. Entonces, cualquier javascript específico de la página residirá en la parte superior de cada archivo HTML.

Me estoy dando cuenta rápidamente de que esto es un problema. El uso de jQuery.load () para cargar en mis páginas provoca errores de seguridad en mi aplicación.

Error de tiempo de ejecución de JavaScript: no se puede agregar contenido dinámico. Un script intentó inyectar contenido dinámico, o elementos previamente modificados dinámicamente, que podrían ser inseguros. Por ejemplo, el uso de la propiedad innerHTML para agregar secuencias de comandos o HTML con formato incorrecto generará esta excepción. Utilice el método toStaticHTML para filtrar contenido dinámico, o cree elementos y atributos explícitamente con un método como createElement.

Realmente esperaba evitar tener que aprender un montón de cosas específicas de Microsoft. Creo que es genial que hayan proporcionado muchas herramientas y otras que no, y tal vez simplemente no las he usado lo suficiente, pero todo se siente demasiado rígido para mí y para lo que estoy tratando de hacer o puedo lograr. con jQuery. Soy alguien a quien le gusta saber EXACTAMENTE lo que está sucediendo y tener control total sobre ello.

También mirando a través de las plantillas y proyectos de muestra, realmente no me gusta todo el código repetido. Por ejemplo, cada archivo HTML único declara todas las mismas referencias. Quiero escribir mis referencias y secciones como mi barra de título solo una vez, y no tener que copiar / pegar ese código en todo mi proyecto.

¿Hay alguna forma de hacer las cosas como esperaba y crear una aplicación de una sola página? ¿Tienen su propio sustituto para jQuery''s .load ()?

¡Cualquier ayuda que me señale en la dirección correcta sería muy apreciada!

EDITAR 14/8/2012:

He intentado usar la solución de esta pregunta: el uso de jQuery con Windows 8 Metro JavaScript App provoca un error de seguridad

Esto elimina la advertencia de seguridad y puedo cargar en HTML usando jQuery.load (). Sin embargo, mirando el explorador DOM, mi HTML está siendo despojado de mis scripts.

También he intentado envolver mi llamada .load () dentro de MSApp.execUnsafeLocalFunction (), pero una vez más, mi archivo aún se elimina de todos los scripts. ¿Lo que da?


Arreglo simplemente cambiando la línea de jQuery que estaba causando el error.

jQuery-1.8.0, línea 5566:

append: function () { return this.domManip(arguments, true, function (elem) { if (this.nodeType === 1 || this.nodeType === 11) { self.appendChild(elem); // problem line } }); },

Cambiado a:

append: function () { return this.domManip(arguments, true, function (elem) { if (this.nodeType === 1 || this.nodeType === 11) { var self = this; MSApp.execUnsafeLocalFunction(function () { self.appendChild(elem); }); } }); },


Dependiendo de su aplicación, si no tiene la intención de acceder a ningún componente de WinRT, puede navegar por su página a ms-appx-web, que cambiará la política de seguridad de la página, pero no puede especificar esto desde el inicio. Tendría que hacer una navegación y aprovechar ese nuevo contexto de seguridad.

La otra opción lo tiene para envolver las llamadas a JQuery con la función msWWA.execUnsafeLocalFunction, que permitirá que todo ese código inseguro se introduzca en el DOM.


Hay una forma "formal" de hacer lo que está buscando.
WinJS.Navigation se proporciona para admitir "aplicaciones de una sola página". Por ejemplo, el default.html contendría un marcado que representaría donde iría el contenido de la página cargada dinámicamente:

<div id="contenthost" data-win-control="Application.PageControlNavigator" data-win-options="{home: ''/pages/home/home.html''}"> </div>

En el ejemplo anterior, la página de contenido real cargada se encuentra en /pages/home/home.html

En los controladores de eventos, simplemente puede hacer lo siguiente para load o navegar a otra página:

WinJS.Navigation.nav("/pages/other/page.html");

Es cierto, no es jQuery, pero funciona muy bien :)