Turbolinks-ios:来自 web->native 的元数据

Turbolinks-ios: Metadata from web->native

我在后端使用 Turbolinks 5,在我的 iOS 应用程序中使用 turbolinks-ios。

当页面在 VisitableViewController 中加载时,我想让本机应用程序从网页接收(或检索?)一些元数据,以便提供一些额外的 UI使用本机代码的功能可见性。

我知道我可以通过在服务器端设置一些 <meta> 标记,然后在 WKWebView 中执行 JS 并以这种方式获取元标记,以迂回的方式做到这一点,但是这似乎是一个黑客。

另一种选择是执行 turbolinks 回调消息并通过 addScriptMessageHandler 接收,但这似乎也是一种 hack。

如有任何帮助,我们将不胜感激!也许有更好的、经过认可的方法来做到这一点?这似乎是一个普遍的需求。

我最终采用了元标记的原始想法。然后,我所做的是在页面加载时,像这样调用消息处理程序,将那些(过滤的)元标记的内容传递给处理程序:

$(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);
  }
});

然后我简单地在 turbolinks 中拦截那个处理程序,我就有了数据。

注意:data-scanner-app 是我添加到我想要包含的元标记中的数据属性。