Die Verwendung von jQuery mit der Windows 8 Metro JavaScript App verursacht einen Sicherheitsfehler

Lesezeit: 7 Minuten

Die Verwendung von jQuery mit der Windows 8 Metro JavaScript
Patridge

Da klang es so jQuery war eine Option für Metro-JavaScript-Apps, Ich fing an, mich auf die Entwicklung von Windows 8 zu freuen. Ich habe Visual Studio 2012 Express RC installiert und ein neues Projekt gestartet (sowohl leere als auch Rastervorlagen haben das gleiche Problem).

Ich habe eine lokale Kopie von jQuery 1.7.2 erstellt und als Skriptreferenz hinzugefügt.

<!-- SomeTestApp references -->
<link href="https://stackoverflow.com/css/default.css" rel="stylesheet" />
<script src="/js/jquery-1.7.2.js"></script>
<script src="/js/default.js"></script>

Sobald ich die resultierende App ausgeführt habe, wird leider ein Konsolenfehler ausgegeben:

HTML1701: Dynamischer Inhalt ‘a’ kann nicht hinzugefügt werden. Ein Skript hat versucht, dynamischen Inhalt oder zuvor dynamisch geänderte Elemente einzufügen, die möglicherweise unsicher sind. Wenn Sie beispielsweise die innerHTML-Eigenschaft zum Hinzufügen von Skripts oder fehlerhaftem HTML verwenden, wird diese Ausnahme generiert. Verwenden Sie die toStaticHTML-Methode, um dynamische Inhalte zu filtern, oder erstellen Sie explizit Elemente und Attribute mit einer Methode wie createElement. Weitere Informationen finden Sie unter
http://go.microsoft.com/fwlink/?LinkID=247104.

Ich habe einen Haltepunkt in einer nicht minimierten Version von jQuery gesetzt und gefunden die beleidigende Linie:

div.innerHTML = "   <link/><table></table><a href="https://stackoverflow.com/a" style="top:1px;float:left;opacity:.55;">a</a><input type="checkbox"/>";

Offenbar das Sicherheitsmodell für Metro-Apps verbietet das Erstellen von Elementen auf diese Weise. Dieser Fehler verursacht keine unmittelbaren Probleme für den Benutzer, aber angesichts seiner Position mache ich mir Sorgen, dass er dazu führen wird, dass Capability-Discovery-Tests in jQuery fehlschlagen, die nicht sollten.

Ich möchte auf jeden Fall jQuery $.Deferred um so ziemlich alles einfacher zu machen. Ich würde es vorziehen, die Selektor-Engine und die Event-Handling-Systeme verwenden zu können, aber ich würde ohne sie leben, wenn ich müsste.

Wie bringt man die neueste jQuery dazu, gut mit der Metro-Entwicklung zu spielen?

  • Laden Sie jquery über ein cdn?

    – Lukuma

    2. Juni 12 um 3:35 Uhr

  • Nein. Dies ist ein Fehler, der bei der Ausführung des lokalen jQuery-Codes ausgelöst wird.

    – Patridge

    2. Juni 12 um 4:21 Uhr

  • Nebenbei bemerkt sieht es so aus, als könnte ich a lernen neues Versprechungssystem anstelle von jQuery $.Deferred.

    – Patridge

    2. Juni 12 um 4:28 Uhr

  • jQuery 1.8 benötigt zwei weitere Modifikationen, um einwandfrei mit Windows 8 zusammenzuarbeiten. Ich habe a geschrieben Blogeintrag das die notwendigen Änderungen behandelt, einige Hintergrundinformationen liefert und eine “gepatchte” Version von jQuery 1.8 bereitstellt.

    – David Müller

    28. August 2012 um 14:16 Uhr

  • Hier ist eine gute Ressource für die Verwendung von jQuery unter Windows 8: incloud.de/2012/08/windows-8-using-jquery-for-app-development

    – Nate Radebaugh

    2. November 12 um 15:06 Uhr

Sie müssen die jQuery-Quelle bearbeiten, damit Sie die jQuery.support Funktion zu MSApp.execUnsafeLocalFunctionwodurch die Überprüfung unsicherer Inhalte wie folgt deaktiviert wird:

jQuery.support = MSApp.execUnsafeLocalFunction(function() {

    var support,
        all,
        a,
        select,
        opt,
        input,
        fragment,
        tds,
        events,
        eventName,
        i,
        isSupported,
        div = document.createElement( "div" ),
        documentElement = document.documentElement;


    // lots of statements removed for brevity

    return support;
});

Sie müssen daran denken, das letzte Klammerpaar zu entfernen – Sie benötigen keine selbstausführende Funktion, weil execUnsafeLocalFunction führt die übergebene Funktion automatisch aus.

Ich schlage vor, dass ein besserer Ansatz darin besteht, die WinJS-Funktionen zu verwenden – dazu gehören die WinJS.Promise -Objekt als Alternative zu zurückgestellten Operationen (die selbst eine Implementierung des Promise-Musters sind). Und Sie können einige grundlegende DOM-Manipulationen mit dem durchführen WinJS.Utilities Namensraum.

Sie sollten es sich zweimal überlegen, jQuery für verzögerte Operationen zu verwenden. Der WinJS.Promise -Objekt wird in allen Metro-APIs verwendet, um asynchrone Aktivitäten darzustellen, und Sie werden am Ende zwei ähnliche, aber unterschiedliche Ansätze verwenden.

  • Super, das hat mich auch genervt und der Fix hat perfekt funktioniert. Falls jemand keine Lust dazu hat oder sich nicht mit der jQuery-Quelle herumschlagen möchte, ist dies eine verkleinerte Version, die ich gerade für mich selbst erstellt habe: pastebin.com/0NC6XBFp.

    – Zac Seth

    2. Juni 12 um 17:33 Uhr

  • Genau wie ein Datenpunkt verursacht jQuery 1.7.1 diesen Fehler nicht, es ist neu mit etwas, das sich in 1.7.2 geändert hat.

    – Chris Tavares

    4. Juni 12 um 18:20 Uhr

  • Das erklärt sicherlich alle Blogbeiträge über die Verwendung von jQuery mit Metro, ohne dass jemand Probleme hat. Sie wurden hauptsächlich geschrieben, als sich VS12 in der Entwicklungsvorschau befand (veröffentlicht am 16. September 2011), vor jQuery 1.7.2 (veröffentlicht am 21. März 2012).

    – Patridge

    6. Juni 12 um 13:11 Uhr

  • Seltsam – Ich habe es gerade mit der neuen Release Preview-Version von Win8 und jQuery 1.7.2 versucht, und alles hat einfach funktioniert, kein Sicherheitsfehler. Hier geht etwas Seltsames vor…

    – Chris Tavares

    6. Juni 12 um 17:57 Uhr

  • Adam, bekommst du eine First-Chance-Ausnahme oder eine unbehandelte Ausnahme? Wenn Sie im Dialogfeld des Debuggers auf „Fortfahren“ klicken, stirbt die App oder wird sie weiter ausgeführt? Wenn es weiterhin ausgeführt wird, ist es eigentlich kein Problem, es ist nur eine behandelte Ausnahme. Wenn die App stirbt, dann passiert etwas anderes.

    – Chris Tavares

    12. Juni 12 um 17:24 Uhr

Hier ist Ihre Antwort

https://github.com/appendto/jquery-win8

Seine offizielle jquery-Bibliothek für Windows 8

  • Das Projekt wird “beendet”, weil seine Autoren sagen, dass das Problem von jQuery 2.0 behoben wurde; Das Problem tritt jedoch weiterhin mit jQuery 2.1.0 und VisualStudio 2013 auf …

    – Bambus

    7. Februar 14 um 9:02 Uhr

  • Tatsächlich tritt das Problem bei jQuery 2.0.2 nicht auf, also scheint es eine Regression zwischen 2.0.2 und 2.1.0 zu geben

    – Bambus

    7. Februar 14 um 9:17 Uhr

  • Das Problem bleibt in jQuery 2.2.4 und 3.1.0 bestehen, bei WP8-Apps sind keine append()-Operationen möglich.

    – andreszs

    14. August 16 um 21:17 Uhr


Die Verwendung von jQuery mit der Windows 8 Metro JavaScript
Rob M.

Für das, was es wert ist, habe ich den Großteil des jQuery-Kerns portiert, um die native WinJS-Bibliothek zu umschließen. Es ist leicht und bietet fast alles, was jQuery tut, mit dem Hinzufügen einiger Plugins für Abzeichen, Benachrichtigungen usw.

Es ist noch in Arbeit, aber ich versuche, einige Leute dazu zu bringen, sich dem Spaß anzuschließen.

https://github.com/rmcvey/winjq

Kurzfassung (Dokumentation wird ergänzt): http://practicaljs.com/jquery-in-windows-8-apps/

  • Tolle Bibliothek, hoffe du machst weiter so 🙂

    – Reise

    29. Januar 13 um 23:37 Uhr

  • Ja, ich habe es für die Windows 8-App von Answers.com verwendet; Haben Sie spezielle Probleme mit der Bibliothek?

    – Rob M.

    11. Juni 13 um 22:58 Uhr

Nach dem letzten //Build/ 2012 Konferenz u dieses Gespräch spricht über die Verwendung von jQuery in Windows 8 Store Apps. Insbesondere sprechen sie über die genaue Ausnahme von Skriptinjektion Innerhalb innerHTMLund sprechen Sie über die darin vorgenommenen Aktualisierungen.

Das Unternehmen Anhängen ebenfalls offiziell vorgestellt jQuery für Windows 8 während dieses Gesprächs. Es sieht ordentlich aus der Demonstration, die im Vortrag im Link darüber gegeben wurde.

Sie sagen auch, dass es keine gute Idee ist, jQuery von CDN für Windows 8-Apps im lokalen Kontext zu erhalten!

Der JavaScript Dynamic Content-Shim auf GitHub wurde von Microsoft Open Technologies erstellt und veröffentlicht, um diesen Fehler zu beheben. Es wurde nicht mit jQuery getestet, wird aber höchstwahrscheinlich Ihr Problem lösen. Verweisen Sie auf die Datei winstore-jscompat.js am Anfang Ihrer App, bevor andere Skripts ausgeführt werden, und Sie sollten diesen Fehler nicht mehr sehen.

  • Danke. Dies funktioniert ordnungsgemäß mit AngularJS, daher gehe ich davon aus, dass es auch mit jQuery funktionieren wird.

    – Dwettstein

    29. Juli 15 um 10:29 Uhr

  • Danke!! Ich würde Ihre Antwort 10 Mal positiv bewerten, wenn ich könnte, dies ist wirklich die endgültige Lösung für das Windows-Problem. Jetzt kann ich jQuery 2.x normal verwenden. Ich habe Stunden damit verschwendet, mich nach einer Lösung umzusehen, danke. Ich werde dich jetzt für alles abstimmen.

    – andreszs

    14. August 16 um 21:29 Uhr


Die Verwendung von jQuery mit der Windows 8 Metro JavaScript
Chris Tavares

Ich habe ein wenig mehr Nachforschungen angestellt und wollte ein paar Dinge klarstellen.

Der angezeigte Fehler tritt in der JavaScript-Konsole auf und ist keine tatsächliche Ausnahme. Der jQuery-Code wird weiter ausgeführt Alles gut. Es ist eigentlich etwas, das das zugrunde liegende System protokolliert, kein Fehler oder Ausnahme.

Es gibt keinen Grund, jQuery zu patchen oder irgendetwas anderes zu tun – es ist eine laute Systemkomponente, kein tatsächlicher Fehler.

  • Danke. Dies funktioniert ordnungsgemäß mit AngularJS, daher gehe ich davon aus, dass es auch mit jQuery funktionieren wird.

    – Dwettstein

    29. Juli 15 um 10:29 Uhr

  • Danke!! Ich würde Ihre Antwort 10 Mal positiv bewerten, wenn ich könnte, dies ist wirklich die endgültige Lösung für das Windows-Problem. Jetzt kann ich jQuery 2.x normal verwenden. Ich habe Stunden damit verschwendet, mich nach einer Lösung umzusehen, danke. Ich werde dich jetzt für alles abstimmen.

    – andreszs

    14. August 16 um 21:29 Uhr


1643256671 93 Die Verwendung von jQuery mit der Windows 8 Metro JavaScript
David Voyles

Ich habe hier eine ziemlich detaillierte Erklärung geschrieben, wie man jQuery mit Windows 8 zum Laufen bringt
http://davidvoyles.wordpress.com/2013/09/23/hacking-jquery-to-work-in-windows-8/

  • Ich habe meine Seite vor einiger Zeit verschoben, ich schätze, es hat den Link gebrochen. Hier ist der Neue: davevoyles.azurewebsites.net/…

    – Dave Voyles

    8. Februar 14 um 11:41 Uhr

.

655450cookie-checkDie Verwendung von jQuery mit der Windows 8 Metro JavaScript App verursacht einen Sicherheitsfehler

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy