提交表单按钮在 WebView 上不起作用

Submit form button does not work on WebView

在 WebView 中加载某些网站时,我无法提交它们的表单。单击提交输入(按钮)时,它获得焦点,但没有其他任何反应。

这些相同的站点可以在 Chrome(在同一台设备上)上运行。

我该如何解决这个问题?是否缺少我的设置?

也将感谢您提供有关此问题发生原因的反馈。


例子

重现步骤

  1. 加载 BrowseActivity,这将加载 https://m.ebay.com/
  2. 页面加载后,输入搜索查询(例如 "Laptop")
  3. 按表单的蓝色搜索按钮或软件键盘的操作按钮(放大镜图标)

预期行为:应提交搜索表单并显示搜索结果

实际行为:蓝色搜索按钮获得焦点(由明亮的边框表示),但没有其他任何反应。


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 引擎版本,我帮不上什么忙。

干杯。