我正在尝试使用 android webview 实现类似 facebook 的功能。没有“确认”对话框,它工作正常。但是当需要确认时它不起作用。这是我正在使用的代码 fragment 。
private void setUpWebView() {
likeWebView.setVerticalScrollBarEnabled(false);
likeWebView.setHorizontalScrollBarEnabled(false);
likeWebView.setWebViewClient(new FacebookWebViewClient());
likeWebView.setWebChromeClient(new MyChromeClient());
likeWebView.getSettings().setJavaScriptEnabled(true);
String url = getFacebookLikeUrl();
likeWebView.loadUrl(url);
}
我还设置了 ViewClient 和 WebChromeClient。
private String getFacebookLikeUrl() {
return "http://www.facebook.com/plugins/like.php?" + "href="
+ URLEncoder.encode(mUrl) + "&access_token="
+ URLEncoder.encode(facebook.getAccessToken());
}
请帮我解决这个问题。提前致谢。
最佳答案
Facebook 点赞确认在新窗口中打开 confirm_widget。所以你的 webview 应该支持多窗口打开。为此 setJavaScriptCanOpenWindowsAutomatically(true) 和 setSupportMultipleWindows(true) 为您的 webview-
private void setUpWebView() {
likeWebView = new WebView(getContext());
likeWebView.setWebViewClient(new FacebookWebViewClient());
likeWebView.setWebChromeClient(new MyChromeClient());
final WebSettings webSettings = likeWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setSupportMultipleWindows(true);
String url = getFacebookLikeUrl();
likeWebView.loadUrl(url);
likeWebView.setLayoutParams(FILL);
mContent.addView(likeWebView);
}
Facebook 点赞确认调用 onCreateWindow() 方法。所以覆盖 WebChromeClient 中的 onCreateWindow 方法 -
final class MyChromeClient extends WebChromeClient {
// Add new webview in same window
@Override
public boolean onCreateWindow(WebView view, boolean dialog,
boolean userGesture, Message resultMsg) {
WebView childView = new WebView(getContext());
childView.getSettings().setJavaScriptEnabled(true);
childView.setWebChromeClient(this);
childView.setWebViewClient(new FacebookWebViewClient());
childView.setLayoutParams(FILL);
mContent.addView(childView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(childView);
resultMsg.sendToTarget();
return true;
}
// remove new added webview whenever onCloseWindow gets called for new webview.
@Override
public void onCloseWindow(WebView window) {
mContent.removeViewAt(mContent.getChildCount() - 1);
}
}
当用户点击喜欢或取消时,喜欢调用 onCloseWindow 的 confirm_widget。在此方法中删除最后添加的 webview。
关于android - 如何像在 android webview 中确认一样处理 facebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7485850/