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
是我添加到我想要包含的元标记中的数据属性。
我在后端使用 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
是我添加到我想要包含的元标记中的数据属性。