【问题标题】:Clickevents are not working in web view android点击事件在 webview android 中不起作用
【发布时间】:2014-04-17 09:06:41
【问题描述】:

我必须在 android 中创建我们的应用程序。

所以我所做的是,只需在 res 下创建 raw 文件夹并将 html 文件放在那里。

一切正常,但是当我单击放置在该网页内的按钮时,没有任何反应,并且单击事件无法正常工作。

这是我的代码。

newfile.html

<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form>
<input type="button" value="Click me" onclick="openDialog()">
<script>
function openDialog()
{

alert("ok");
}
</script>
</form>
</body>
</html>

这是我的java代码,

webview.loadData(readTextFromResource(R.raw.newfile),"text/html", "utf-8");

readTextFromResource 函数

    private String readTextFromResource(int resourceID)

{
    InputStream raw = getResources().openRawResource(resourceID);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    int i;
    try
    {
        i = raw.read();
        while (i != -1)
        {
           stream.write(i);
            i = raw.read();
        }
        raw.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
return stream.toString();
}

请告诉我为什么点击事件不起作用!

【问题讨论】:

    标签: javascript android html webview


    【解决方案1】:

    我正在使用 phonegap 做这类事情。如果要调用本机函数,请使用启用了 java 脚本的 Web 视图。我在我的 MainActivity 和 assets 文件夹下的 Login.html 文件中扩展了 DroidGap
    在您的 Main Activity.java 中,

    WebView webView=new WebView(this);
    webview.loadUrl("file:///android_asset/www/Phone/Login.html");
    setContentView(webView);
    

    无论如何,如果问题没有解决,请尝试添加这个(onCreate方法中的所有代码)

        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setSaveFormData(true);
        webView.getSettings().setAllowContentAccess(true);
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setAllowFileAccessFromFileURLs(true);
        webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
        webView.getSettings().setSupportZoom(true);
        webView.setWebViewClient(new WebViewClient());
        webView.setClickable(true);
        webView.setWebChromeClient(new WebChromeClient());
    

    如果你想了解更多关于如何通过网页here is the link访问Android原生代码

    【讨论】:

      【解决方案2】:

      WebView 不响应按钮时,您可以在移动浏览器或桌面浏览器中以最小宽度(自适应布局)测试网页。当您单击它时,您将看到该按钮的工作原理。然后您可以按 F12 并查看“网络”选项卡中发送了哪些查询。

      (如果你按Ctrl+Shift+C,你会看到页面的布局,然后可以点击一个元素(按钮)并查看代码。)

      如果按钮显示图片对话框(拍照、上传图片),则应使用onShowFileChooser ([1])。

      val startActivityForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { activityResult ->
          //
      }
      
      @SuppressLint("SetJavaScriptEnabled")
      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
          super.onViewCreated(view, savedInstanceState)
      
          with(webview) {
              settings.javaScriptEnabled = true
              settings.javaScriptCanOpenWindowsAutomatically = true
              settings.domStorageEnabled = true
              // webViewClient = MyWebViewClient()
              webChromeClient = MyWebChromeClient()
          }
      }
      
      private class MyWebChromeClient : WebChromeClient() {
      
          override fun onShowFileChooser(
              webView: WebView?,
              filePathCallback: ValueCallback<Array<Uri>>?,
              fileChooserParams: FileChooserParams?
          ): Boolean {
              // Check permissions, create intent.
              startActivityForResult.launch(chooserIntent)
              return true
          }
      }
      

      如果你有一个 JavaScript 按钮,你可以附加 JavaScript 接口e([1][2][3]):

      @SuppressLint("SetJavaScriptEnabled")
      override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
          super.onViewCreated(view, savedInstanceState)
      
          with(webview) {
              settings.javaScriptEnabled = true
              settings.javaScriptCanOpenWindowsAutomatically = true
              settings.domStorageEnabled = true
              // WebView.setWebContentsDebuggingEnabled(BuildConfig.TEST)
              addJavascriptInterface(
                  JsHandle(this@WebViewFragment),
                  "Android"
              )
          }
      }
      
      class JsHandle(private var fragment: WebViewFragment) {
      
          @JavascriptInterface
          fun notify(notify: String) {
              //
          }
      }
      

      您的网页应该包含javascript:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多