提交表单按钮在 WebView 上不起作用
Submit form button does not work on WebView
在 WebView 中加载某些网站时,我无法提交它们的表单。单击提交输入(按钮)时,它获得焦点,但没有其他任何反应。
这些相同的站点可以在 Chrome(在同一台设备上)上运行。
我该如何解决这个问题?是否缺少我的设置?
也将感谢您提供有关此问题发生原因的反馈。
例子
重现步骤
- 加载 BrowseActivity,这将加载
https://m.ebay.com/
- 页面加载后,输入搜索查询(例如 "Laptop")
- 按表单的蓝色搜索按钮或软件键盘的操作按钮(放大镜图标)
预期行为:应提交搜索表单并显示搜索结果
实际行为:蓝色搜索按钮获得焦点(由明亮的边框表示),但没有其他任何反应。
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 interface 来捕捉按钮上的点击,读取输入查询,然后重定向到搜索页面。
无论如何,这种方法与网站本身(例如 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);
我遇到了类似的问题,其中一个特别是上传文件。
问题发生原因反馈:-
问题是存在不同的 OS 版本和不同的 Web 引擎版本。由于我假设 Web 视图显示的是一个 HTML5 页面,并且它在给定设备上运行不佳,因此您可能需要的不仅仅是启用 JS。
一些网页跟踪提交数量,它们需要访问 client/web 存储空间。
WebSettings mWebSettings = mWebView.getSettings();
mWebSettings.setJavaScriptEnabled(true); // Done above
mWebSettings.setDomStorageEnabled(true); // Try
mWebSettings.setSupportZoom(false);
mWebSettings.setAllowFileAccess(true);
mWebSettings.setAllowContentAccess(true);
如果至少不知道 Android OS 版本将指向所使用的 Web 引擎版本,我帮不上什么忙。
干杯。
在 WebView 中加载某些网站时,我无法提交它们的表单。单击提交输入(按钮)时,它获得焦点,但没有其他任何反应。
这些相同的站点可以在 Chrome(在同一台设备上)上运行。
我该如何解决这个问题?是否缺少我的设置?
也将感谢您提供有关此问题发生原因的反馈。
例子
重现步骤
- 加载 BrowseActivity,这将加载
https://m.ebay.com/
- 页面加载后,输入搜索查询(例如 "Laptop")
- 按表单的蓝色搜索按钮或软件键盘的操作按钮(放大镜图标)
预期行为:应提交搜索表单并显示搜索结果
实际行为:蓝色搜索按钮获得焦点(由明亮的边框表示),但没有其他任何反应。
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 interface 来捕捉按钮上的点击,读取输入查询,然后重定向到搜索页面。
无论如何,这种方法与网站本身(例如 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);
我遇到了类似的问题,其中一个特别是上传文件。
问题发生原因反馈:-
问题是存在不同的 OS 版本和不同的 Web 引擎版本。由于我假设 Web 视图显示的是一个 HTML5 页面,并且它在给定设备上运行不佳,因此您可能需要的不仅仅是启用 JS。
一些网页跟踪提交数量,它们需要访问 client/web 存储空间。
WebSettings mWebSettings = mWebView.getSettings();
mWebSettings.setJavaScriptEnabled(true); // Done above
mWebSettings.setDomStorageEnabled(true); // Try
mWebSettings.setSupportZoom(false);
mWebSettings.setAllowFileAccess(true);
mWebSettings.setAllowContentAccess(true);
如果至少不知道 Android OS 版本将指向所使用的 Web 引擎版本,我帮不上什么忙。
干杯。