单击事件在webview android中不起作用

时间:2014-04-17 09:06:41

标签: javascript android html webview

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

所以我所做的就是,只需在 res 下创建原始文件夹,然后将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();
}

请指出为什么点击事件不起作用!

2 个答案:

答案 0 :(得分:7)

我正在使用phonegap做这类事情。如果要调用本机函数,请使用启用了Java脚本的Web视图。我在我的MainActivity中扩展了DroidGap,在 assets 文件夹下扩展了我的Login.html文件 在您的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原生代码的信息

答案 1 :(得分:0)

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

enter image description here

(如果你按下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: