WKwebView + Remote URL + jQuery lokal

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Rabattcode für die heise MacDev 2020: Macoun20

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • WKwebView + Remote URL + jQuery lokal

    Moin zusammen,

    aktuell stehe ich or folgender Herausforderung.
    Ich experimentiere (ich bin Anfänger) derzeit ein wenig mit Websockets und webViews.

    Die URL der webView ist eine Remote-URL (verwende ich eine lokale HTML Datei klappt alles, ich benötige aber die Remote-Ressource).
    Die zu ladenden Scripte sollen jedoch lokal liegen.

    Struktur:

    - App
    -- assets
    --- js
    ---- jquery.js

    * Das Laden der Remote URL klappt
    * Der Zugriff auf die jQuery funktioniert ebenfalls

    HTML-Quellcode

    1. <body>
    2. <div id="content">LEER</div>
    3. </body>
    4. </html>
    5. <script>
    6. //Klappt, JS wird ausgeführt
    7. window.webkit.messageHandlers.bier.postMessage("TEST");
    8. //Klappt nicht, scheint das DOM Element "#content" nicht zu finden
    9. $('#content').append('Test HTML');
    10. $(document).ready(function(){
    11. //Klappt, jQuery scheint geladen zu werden
    12. window.webkit.messageHandlers.bier.postMessage("document.ready");
    13. //Klappt nicht, scheint das DOM Element "#content" nicht zu finden
    14. $('#content').append('Test HTML');
    15. });
    16. </script>
    Alles anzeigen



    Aber wieso zum Teufel kann ich mit den jQuery Methoden nicht auf den DOM Pfad des geladenen Requests zugreifen, obwohl das jquery document ready selbst wie gewünscht feuert?


    Quellcode

    1. let jsContent = try String(contentsOfFile: Bundle.main.path(forResource: "jquery", ofType: "js")!, encoding: String.Encoding.utf8)
    2. let source = """
    3. var script = document.createElement('script');
    4. script.innerHTML = '\(jsContent)';
    5. document.body.appendChild(script);
    6. """
    7. let userScript = WKUserScript(source: source,
    8. injectionTime: .atDocumentStart,
    9. forMainFrameOnly: false)
    10. let userContentController = WKUserContentController()
    11. userContentController.addUserScript(userScript)
    12. userContentController.add(self, name: "bier")
    13. let configuration = WKWebViewConfiguration()
    14. configuration.userContentController = userContentController
    15. let webView = WKWebView(frame: .zero, configuration: configuration)
    16. webView.configuration.preferences.javaScriptEnabled = true
    17. if let url = URL(string: "https://sub.domain.tld/1234.html") {
    18. let url2 = URL(string: "https://sub.domain.tld/1234.html")
    19. let request = URLRequest(url: url2!)
    20. webView.navigationDelegate = self
    21. webView.load(request)
    Alles anzeigen

    Hat jemand einen Tip für mich?

    Dank und Gruß
    Boris