在我的应用中,我有一个webView
,用于显示网站,当我尝试单击“复制”按钮时,它不会复制任何内容。如何解决这个问题?
这是到目前为止我尝试过的方法,但没有帮助:
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setMinimumFontSize(1);
webView.getSettings().setMinimumLogicalFontSize(1);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAllowContentAccess(true);
我正在检查Logcat并在单击网站上的“复制”按钮时看到此错误:“
未定义(承诺)未定义
“但是,此按钮在浏览器中可以正常使用,但在WebView.
中不可用
答案 0 :(得分:0)
根据您所写的评论,您提到要从网站中提取文本。您需要确定您确切想要的文本,并将其放在HTML代码中。
以下解决方案将允许您提取给定网站的HTML代码,但是您必须将其范围缩小到要进一步提取的文本以及它位于class / id
的哪个属性中。 >
webView.evaluateJavascript(
"(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String html) {
Log.d("HTML", html);
// This should log the html code within the log cat
}
});
-想在<{3}}下归功于 Balaji M ,因为它也引起了这个问题。-
~~ 如果您决定更改此问题的方法,我想保留我以前的答案 ~~
由于您已经找到了事件监听器的答案,因此可以在webView中检测何时触发复制按钮,因此现在唯一缺少的功能部分是从ClipBoard粘贴。
应将以下代码放入onCreate方法中:
// Gets a handle to the clipboard service.
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
现在是时候将剪贴板中的数据复制到我们的String变量或任何其他变量类型中了。
// Get clip data from clipboard.
ClipData clipData = clipboardManager.getPrimaryClip();
// Get item count.
int itemCount = clipData.getItemCount();
if(itemCount > 0){
// Get source text.
Item item = clipData.getItemAt(0);
String copiedData = item.getText().toString();
//For testing purpose, display toast containig your copied data
Toast.makeText(getActivity(), copiedData , Toast.LENGTH_LONG).show();
}