Zugriff auf WebView in neuem Tab

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

  • Zugriff auf WebView in neuem Tab

    Hallo zusammen,

    bisher (in Objective-C) habe ich folgendermaßen ein neues Fenster / Tab geöffnet und die URL im WebView des neuen Fensters geöffnet:

    Quellcode

    1. // New Tab
    2. WebDocument *myDocument = [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil];
    3. // Create Request
    4. [[myDocument webView] loadRequest:navigationAction.request];
    Das Problem bei meinem Swift-Code ist, dass ich auf das WebView im neuen Tab nicht zugreifen kann.
    Mein Demo-Swift-Code:

    Quellcode

    1. // New Tab
    2. var myDocument = try? NSDocumentController.shared.openUntitledDocumentAndDisplay(true) as? Document
    3. // Start Request
    4. let url = URL(string: "https://example.com")
    5. let request = URLRequest(url: url! as URL)
    6. myDocument?.webView?.load(request)
    Wo liegt hier der Hund begraben? ?(
  • Mac & i Test Abo
  • Hast du mal überprüft, ob myDocument nicht nil ist? Zum Beispiel so:

    Quellcode

    1. guard let myDocument = (try? NSDocumentController.shared.openUntitledDocumentAndDisplay(true)) as? Document else {
    2. // Document konnte nicht erstellt werden
    3. return
    4. }
    Und ich würde dir empfehlen, sich noch mal mit Optionals auseinander zu setzen, denn sowas

    let request = URLRequest(url: url! as URL)

    ist Murks.
  • Scotch schrieb:

    Quellcode

    1. // New Tab
    2. WebDocument *myDocument = [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil];

    Quellcode

    1. // New Tab
    2. var myDocument = try? NSDocumentController.shared.openUntitledDocumentAndDisplay(true) as? Document

    WebDocument vs Document?
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • Entschuldigt bitte die späte Antwort.


    torquato schrieb:

    Scotch schrieb:

    Quellcode

    1. // New Tab
    2. WebDocument *myDocument = [[NSDocumentController sharedDocumentController] openUntitledDocumentAndDisplay:YES error:nil];

    Quellcode

    1. // New Tab
    2. var myDocument = try? NSDocumentController.shared.openUntitledDocumentAndDisplay(true) as? Document
    WebDocument vs Document?
    Ist zu ignorieren - habe ein neues Projekt erstellt und der Name der Klasse haben sich geändert.



    Das Problem ist nicht das Erstellen des neuen Documents, sondern der Zugriff darauf.

    Quellcode

    1. // New Tab
    2. guard let myDocument = (try? NSDocumentController.shared.openUntitledDocumentAndDisplay(true)) as? Document else {
    3. print("Document konnte nicht erstellt werden")
    4. return
    5. }
    6. // Start Request
    7. let urlString = "https://google.de"
    8. let request = URLRequest(url: URL(string: urlString)!)
    9. self.webView.load(request)
    Das neue Tab wird durch den o.g. Code erzeugt, aber anstatt im neuen Tab im WebView Google zu laden, wird Google im ersten Tab geladen.

    Sorry, wenn ich mich etwas undeutlich ausgedrückt habe.
  • Vielleicht gehe ich ja mit einem falschen Ansatz ran.
    Hier einmal mein Code für die gesamte "Neue-Tab-Funktion":

    Quellcode

    1. func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView?
    2. {
    3. if navigationAction.targetFrame?.isMainFrame == nil {
    4. // Neuer Tab
    5. guard ((try? NSDocumentController.shared.openUntitledDocumentAndDisplay(true)) as? Document) != nil else {
    6. // Document konnte nicht erstellt werden
    7. return nil
    8. }
    9. // Lade request
    10. self.webView.load(navigationAction.request)
    11. }
    12. return nil
    13. }
    Alles anzeigen
  • Durch die o.g. Funktion wird bei einem _blank Link zu dem bestehenden Tab (Tab 1) ein neuer Tab hinzugefügt (Tab 2).
    In Tab 1 wird das navigationAction.request geöffnet und nicht wie gewünscht in Tab 2.

    Stattdessen wird in Tab 2 der Haupt-Link angezeigt, welcher durch die viewDidLoad Funktion erneut ausgeführt wird.

    In meinem o.g. alten Objective-C Code hat alles perfekt funktioniert.
    Hat niemand eine Idee, wie ich das navigationAction.request im vorgesehen Tab öffnen kann?