我跟踪访问者的用户名,并希望将用户名数据从网页传递到我的活动方法。传递这些数据的正确方法是什么?
(将用户名数据放在HTML页面的隐藏div中并解析网页是我最后的选择,我不喜欢它)
我在我的android应用程序中使用webview。我加载如下URL:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
...
String url = "http://example.com";
webView.postUrl(url, EncodingUtils.getBytes(myPostData, "base64"));
...
}
我的页面响应中有一些自定义标题。响应头包含以下内容:
header('User name: michael');
如果页面成功加载,我需要从响应中获取该标题,并将其作为自定义维度在我的google分析中使用。
EasyTracker easyTracker = EasyTracker.getInstance();
easyTracker.send(MapBuilder
.createAppView("Home screen")
.set(Fields.customDimension(1), "michael");
.build()
);
我的问题是怎么做才是正确的?是否可以从onpagefinished获取并在分析代码中设置此头,或者有更好的方法?我愿意接受任何与此结构兼容的方法/解决方案。
请注意,我为我的活动工作重写这些方法:
WebViewClient::onPageStarted(WebView view, String url, Bitmap favicon)
WebViewClient::onPageFinished(WebView view, String url)
WebViewClient::shouldOverrideUrlLoading(WebView view, String url)
WebViewClient::onLoadResource(WebView view, String url)
WebViewClient::onReceivedError(WebView view, int errorCode, String description, String failingUrl)
WebChromeClient::onProgressChanged(WebView view, int newProgress)
编辑:
这里有一个类似的答案是3岁:https://stackoverflow.com/a/3134609/429938
但它提供了在
shouldOverrideUrlLoading
中捕获头的功能。不可能在onpagefinished中捕捉到它吗?或者我如何使用Webview.postUrl()
编辑2:
另一个解决方案是使用addJavascriptInterface并从javascript代码中设置用户名,并在活动中设置google分析代码。但这是一个特定于android的解决方案。我希望有一个通用的解决方案,可以用于ios等。
最佳答案
最跨平台的解决方案是javascript桥(addjavascriptinterface)。这是我推荐给你的。
本机部分也可以在ios上实现。html部分保持不变。
如果没有,则需要使用其中一个事件(如onpagefinished)在本机端实现所有逻辑。如果无法从此处访问头,请使用httpurlconnection亲自执行请求,然后使用baseurl加载data。