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
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?
Alles anzeigen
Hat jemand einen Tip für mich?
Dank und Gruß
Boris
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
- <body>
- <div id="content">LEER</div>
- </body>
- </html>
- <script>
- //Klappt, JS wird ausgeführt
- window.webkit.messageHandlers.bier.postMessage("TEST");
- //Klappt nicht, scheint das DOM Element "#content" nicht zu finden
- $('#content').append('Test HTML');
- $(document).ready(function(){
- //Klappt, jQuery scheint geladen zu werden
- window.webkit.messageHandlers.bier.postMessage("document.ready");
- //Klappt nicht, scheint das DOM Element "#content" nicht zu finden
- $('#content').append('Test HTML');
- });
- </script>
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
- let jsContent = try String(contentsOfFile: Bundle.main.path(forResource: "jquery", ofType: "js")!, encoding: String.Encoding.utf8)
- let source = """
- var script = document.createElement('script');
- script.innerHTML = '\(jsContent)';
- document.body.appendChild(script);
- """
- let userScript = WKUserScript(source: source,
- injectionTime: .atDocumentStart,
- forMainFrameOnly: false)
- let userContentController = WKUserContentController()
- userContentController.addUserScript(userScript)
- userContentController.add(self, name: "bier")
- let configuration = WKWebViewConfiguration()
- configuration.userContentController = userContentController
- let webView = WKWebView(frame: .zero, configuration: configuration)
- webView.configuration.preferences.javaScriptEnabled = true
- if let url = URL(string: "https://sub.domain.tld/1234.html") {
- let url2 = URL(string: "https://sub.domain.tld/1234.html")
- let request = URLRequest(url: url2!)
- webView.navigationDelegate = self
- webView.load(request)
Hat jemand einen Tip für mich?
Dank und Gruß
Boris