如何在长按中从网络视图中获取 URL? [英] How to get URL from web view in long click?
问题描述
我有一个网页视图,我想在用户长按链接时获取 URL.我知道我可以做到这一点:
I have a web view that I want to get the URL when the user long clicks on links. I know I can do this:
// Register the context menu for web view
registerForContextMenu(webView);
还有:
@Override
public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
final WebView.HitTestResult result = webView.getHitTestResult();
Log.i("url is ===" , "result.getExtra()")
}
但是这样,在诸如 Google 之类的搜索引擎中,不会返回 URL.这是我长按谷歌搜索结果时的日志:
But this way, In some search engines like Google, Not be return a URL. This is my log when I long clicked on google search results:
数据:图像/PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA + klEQVR4AWMgBnwr4pRloAR8KuA89KmAK4V8A/LZ1YGGvPiQy65MtCaQjR8LuDxh/M8FXNlAQ078D2VgJs6APE6rjwWcj4CaOkGaIIZybPucz1FHvCuyeYVBmkBhAArIL6XcEiCvfCzkNMOpCeRPoPMXgFyACAPOcnAYFLK7fSrkDAR6rQmnAe/KBfmBNhQCDbkGtP0yyO8gsU + FHLYgL4EClGgvgDR9zudcCrT9PchVX4q49YmKc5AmkLNBsQDyOygsQK4iygCQoo8FHLGg0AcFIDQm3gPpvXg1zlu88j ++ 2ACFPB51CAmgbf9xYcIGEAAEDSAWM1ATAAC4CbdSzzGZLwAAAABJRU5ErkJggg ==
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA+klEQVR4AWMgBnwr4pRloAR8KuA89KmAK4V8A/LZ1YGGvPiQy65MtCaQjR8LuDxh/M8FXNlAQ078D2VgJs6APE6rjwWcj4CaOkGaIIZybPucz1FHvCuyeYVBmkBhAArIL6XcEiCvfCzkNMOpCeRPoPMXgFyACAPOcnAYFLK7fSrkDAR6rQmnAe/KBfmBNhQCDbkGtP0yyO8gsU+FHLYgL4EClGgvgDR9zudcCrT9PchVX4q49YmKc5AmkLNBsQDyOygsQK4iygCQoo8FHLGg0AcFIDQm3gPpvXg1zlu88j++2ACFPB51CAmgbf9xYcIGEAAEDSAWM1ATAAC4CbdSzzGZLwAAAABJRU5ErkJggg==
我从 GitHub 下载了一个网络浏览器开源.在这个项目中,程序员做到了这一点,这是可行的:
I download a web browser open source from GitHub. In this project, the Programmer does this and this is worked:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// Get link-URL.
String url = (String) msg.getData().get("url");
Log.i("get url" , url);
}
};
所以我在我的应用程序中编写了这段代码,但是 handleMessage 没有运行.使用 handleMessage 方法是否需要做其他事情?
So I write this code in my app, But handleMessage not be run. Do I need to do anything else to use handleMessage method?
您知道在谷歌搜索结果中获取网址的另一种方法吗?
Do you know another way to get a URL in google search results?
推荐答案
终于,几天后,我找到了解决方案.请尝试这种方式:
Finally, after days, I found a solution. Please try this way:
@Override
public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
String url = null, imageUrl = null;
WebView.HitTestResult result = ((WebView) v).getHitTestResult();
switch (result.getType()) {
case WebView.HitTestResult.SRC_ANCHOR_TYPE:
url = result.getExtra();
break;
case WebView.HitTestResult.IMAGE_TYPE:
imageUrl = result.getExtra();
break;
case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
case WebView.HitTestResult.EMAIL_TYPE:
case WebView.HitTestResult.UNKNOWN_TYPE:
Handler handler = new Handler();
Message message = handler.obtainMessage();
((WebView) v).requestFocusNodeHref(message);
url = message.getData().getString("url");
if ("".equals(url)) {
url = null;
}
imageUrl = message.getData().getString("src");
if ("".equals(imageUrl)) {
imageUrl = null;
}
break;
}
showLongPressMenu(url, imageUrl);
}
这篇关于如何在长按中从网络视图中获取 URL?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!