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

问题描述 投票:0回答:3

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

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

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

也欢迎提供有关此问题发生原因的反馈。


示例

重现步骤

  1. 加载BrowseActivity,这将加载
    https://m.ebay.com/
  2. 页面加载后,输入搜索查询(例如“笔记本电脑”)
  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 界面 来捕获按钮的点击,读取输入查询,然后重定向到搜索页面。

无论如何,这种方法与网站本身(例如 eBay)紧密耦合,我希望它可以与不同的网站一起使用。另外,我不希望网站的更改破坏我的申请。

android android-webview
3个回答
13
投票

您可能需要启用 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);

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 引擎版本),我就无能为力。

干杯。


0
投票

您只需将 JavaScriptEnabled 设置为 true,如下所示:

webView.getSettings().setJavaScriptEnabled(true);
© www.soinside.com 2019 - 2024. All rights reserved.