2016-07-30 3 views
1

Ich verwende Turbolinks 5 auf dem Backend und Turbolinks-iOS in meiner iOS App.Turbolinks-ios: Metadaten von Web-> native

Wenn eine Seite in eine VisitableViewController geladen wird, möchte ich, dass die native App einige Metadaten von der Webseite empfängt (oder abruft?), Um einige zusätzliche UI-Angebote mit nativem Code anzubieten.

Ich weiß, dass ich dies, indem einige <meta> Tags auf der Server-Seite auf Umwege tun, und dann JS Ausführung in den WKWebView und immer an den Meta-Tags, der Art und Weise, aber es scheint wie ein Hack.

Eine andere Option ist die Ausführung einer Callback-Meldung von turbolinks und das Empfangen über addScriptMessageHandler, aber das scheint auch ein Hack zu sein.

Jede Hilfe wäre willkommen! Vielleicht gibt es einen besseren, sanktionierten Weg, dies zu tun? Es scheint, als wäre es ein gemeinsames Bedürfnis.

+0

Haben Sie das Problem gelöst? – Obromios

+0

@Obromios Nur eine Antwort hinzugefügt - überprüfen Sie es – elsurudo

Antwort

0

Ich endete mit meiner ursprünglichen Idee mit den Meta-Tags. Dann, was ich beim Laden der Seite ist, rufen Sie wie so einen Nachrichtenhandler, vorbei an den Inhalt dieser (gefiltert) Meta-Tags an den Handler:

$(function() { 
    if (typeof webkit != 'undefined') { 
    var metadata = {}; 
    $('meta[data-scanner-app="true"]').each(function() { 
     metadata[$(this).attr('property')] = $(this).attr('content'); 
    }); 
    webkit.messageHandlers.ScannerApp.postMessage(metadata); 
    } 
}); 

Dann habe ich einfach abfangen dieses Handler in turbolinks, und ich habe die Daten.

Hinweis: data-scanner-app ist ein Datenattribut, das ich nur den Metatags hinzufüge, die ich einfügen möchte.