【问题标题】:Local HTML file not working properly in Android Webview本地 HTML 文件在 Android Webview 中无法正常工作
【发布时间】:2012-10-30 09:51:44
【问题描述】:

我有一个带有按钮的 HTML 文件,当我们点击按钮时,该按钮会弹出一条警告消息。

我放置了 HTML 文件资源文件夹,它正确加载到模拟器,我可以看到按钮,但我面临的问题是,按钮点击没有响应,我看不到弹出消息。

我也启用了 JavaScript,但结果是否定的。然后我将警报事件更改为 JavaScript 代码但不起作用。我在这里添加我的代码,如果有人可以提供帮助,我将不胜感激。

public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);
     setContentView(com.example.test.R.layout.activity_main);

     myWebView= (WebView) findViewById(com.example.test.R.id.webView1);
     myWebView.getSettings().setJavaScriptEnabled(true);
     myWebView.loadUrl("file:///android_asset/myown.html"); 
}

以下是我的HTML页面代码

<!DOCTYPE html>
<html>
    <body>

        <button type="button" onclick="alert('Hello world!')">Click Me!</button>

    </body>
</html>

【问题讨论】:

标签: java android


【解决方案1】:

为此,您需要使用webChromeClient 并覆盖onJsAlert() 函数:

WebView wv=new WebView(this);   
wv.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                //Do what you need to after alert is received
                return super.onJsAlert(view, url, message, result);
       }

【讨论】:

    【解决方案2】:

    Edit> 这可能不是最简单的解决方案,但它确实提供了额外的功能

    当我创建类似的东西时,它适用于 4.1.2。警报给出了一个漂亮的、全息样式的弹出窗口。我使用了在线资源和webchromeclient(请参阅我之前的答案)。

    但是,如果您想确定这是否有效,您可能需要查看来自 Android 开发者的 Building Web Apps in Webview 页面。它解释了JavaScriptInterface。您可以使用它从您的 HTML 页面(本地或在线)耦合 javascript,但让它执行本机 Java 代码。

    EG 你可以像这样使用 HTML

    <input type="button" value="Click Me!" onClick="showAndroidToast('Hello World!')" />
    
    <script type="text/javascript">
        function showAndroidToast(toast) {
            Android.showToast(toast);
        }
    </script>
    

    添加这个类

    public class JavaScriptInterface {
    Context mContext;
    
    /** Instantiate the interface and set the context */
        JavaScriptInterface(Context c) {
            mContext = c;
        }
    
        /** Show a toast from the web page */
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }
    

    之后,将此代码添加到您提供的示例中。

    myWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
    

    【讨论】:

      【解决方案3】:

      以下代码来自我的生产环境并且完全可以工作,我已将html 文件存储到我的assest 文件夹中,然后将其访问到Activity

      代码:

      String uri = "file:///android_asset/htmlpages/" + index + ".htm";
      WebView wb = (WebView) findViewById(R.id.webView_Glossary);
      wb.getSettings().setJavaScriptEnabled(true);
      wb.loadUrl(uri);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 1970-01-01
        • 2017-03-16
        • 2018-07-02
        • 1970-01-01
        • 2020-05-06
        相关资源
        最近更新 更多