在 WebView 中加载某些网站时,我无法提交其表单。单击提交输入(按钮)时,它会获得焦点,但没有其他反应。
这些相同的网站可以在 Chrome 上运行(在同一设备中)。
我该如何解决这个问题?是否有我缺少的设置?
也欢迎提供有关此问题发生原因的反馈。
重现步骤
https://m.ebay.com/
预期行为:应提交搜索表单并显示搜索结果
实际行为:蓝色搜索按钮获得焦点(由明亮的边框表示),但没有其他反应。
BrowseActivity.java
public class BrowseActivity extends AppCompatActivity {
WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browse);
mWebView = (WebView) findViewById(R.id.home_wv_content);
mWebView.setWebViewClient(new WebViewClient());
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
// Ebay has a blue search button where this issue can be replicated
mWebView.loadUrl("https://m.ebay.com");
}
}
activity_browse.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="my.example.BrowseActivity">
<WebView
android:id="@+id/home_wv_content"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.constraint.ConstraintLayout>
编辑:
我考虑过使用自定义 JavaScript 界面 来捕获按钮的点击,读取输入查询,然后重定向到搜索页面。
无论如何,这种方法与网站本身(例如 eBay)紧密耦合,我希望它可以与不同的网站一起使用。另外,我不希望网站的更改破坏我的申请。
您可能需要启用 webview 中的其他功能才能完全相当于浏览器。除了 javascript 之外,webview 中还有其他一些默认禁用的功能)。
尝试这个设置(基于我的项目,我们在 webview 方面确实遇到了一些问题):
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setDatabaseEnabled(true);
mWebView.getSettings().setDatabasePath(dbpath); //check the documentation for info about dbpath
mWebView.getSettings().setMinimumFontSize(1);
mWebView.getSettings().setMinimumLogicalFontSize(1);
我遇到了类似的问题,特别是上传文件。
反馈此问题发生的原因:-
问题在于存在不同的操作系统版本和不同的 Web 引擎版本。由于我假设 Web 视图呈现的是 HTML5 页面,并且它在给定设备上无法正常工作,因此您可能需要的不仅仅是启用 JS。
某些网页会跟踪提交数量,并且需要访问客户端/网络存储。
WebSettings mWebSettings = mWebView.getSettings();
mWebSettings.setJavaScriptEnabled(true); // Done above
mWebSettings.setDomStorageEnabled(true); // Try
mWebSettings.setSupportZoom(false);
mWebSettings.setAllowFileAccess(true);
mWebSettings.setAllowContentAccess(true);
如果至少不知道 Android 操作系统版本(该版本将指向所使用的 Web 引擎版本),我就无能为力。
干杯。
您只需将 JavaScriptEnabled 设置为 true,如下所示:
webView.getSettings().setJavaScriptEnabled(true);