gpt4 book ai didi

android - 如何在ActionMode override中获取webview的选中文本

转载 作者:太空狗 更新时间:2023-10-29 15:34:35 31 4
gpt4 key购买 nike

我正在上下文操作菜单中添加一些自定义菜单项。我需要使用在 WebView 中选择的词提供网络搜索功能。

我使用这段代码覆盖了 ActionMode。

@Override
public void onActionModeStarted(ActionMode mode) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
if (mActionMode == null) {
mActionMode = mode;
Menu menu = mode.getMenu();

mode.getMenuInflater().inflate(R.menu.menu_search, menu);
}
}
super.onActionModeStarted(mode);
}


public void onContextualMenuItemClicked(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_search:
//HERE I WANT TO GET THE TEXT: HOW CAN I?
break;
}

if (mActionMode != null) {
mActionMode.finish();
}
}

我想使用用户在 web View 中选择的词来搜索我的网站,但我无法获取所选文本的方法。我怎么能得到它,任何人都请帮忙。

提前致谢。

最佳答案

WebView 获取文本选择的唯一方法是基于 javascript。这不是特定于操作模式,这是根据 WebView 开发人员的观点应该如何检索 WebView 文本选择。他们特意决定不提供 API 来从 Java 访问文本选择。

该解决方案包括 2 种方法。

Android API >= 19 你可以使用 evaluateJavascript:

webview.evaluateJavascript("(function(){return window.getSelection().toString()})()",
new ValueCallback<String>()
{
@Override
public void onReceiveValue(String value)
{
Log.v(TAG, "SELECTION:" + value);
}
});

在较旧的版本上,您唯一的选择是自定义 javascript 接口(interface),其中包含一个接受 String 的方法,您应该通过 webview.loadUrl 调用它,传递相同的东西:

webview.loadUrl("javascript:js.callback(window.getSelection().toString())");

其中 js 是附加的 javascript 接口(interface):

webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(new WebAppInterface(), "js");

public class WebAppInterface
{
@JavascriptInterface
public void callback(String value)
{
Log.v(TAG, "SELECTION:" + value);
}
}

关于android - 如何在ActionMode override中获取webview的选中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804100/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com