5

我正在制作一个在 android webview 中运行的应用程序。我遇到了一个奇怪的问题,我的 JavaScript 函数没有被<a></a>onClick 方法调用。

这是我的 html 和 JavaScript 代码:

<html>

<script type="text/javascript" src="http://blue.xxxxxxxx.com/xxxxx/site/js/jquery.js"></script>
<script>
function openFileDialog()
{
    //$("#file").click();   
    alert("Test");
}
</script>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>


<a href="javascript:;" onclick="openFileDialog();">Shujaat</a>
</body>
</html> 

这是我的整个 java webviews 代码。

package com.example.findozerapp;

import my.functions.MyFunctions;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebSettings.ZoomDensity;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {
Context context = MainActivity.this;
Activity activity = MainActivity.this;

WebView webView;
MyFunctions myFunctions;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myFunctions = new MyFunctions(activity);
    webView = (WebView) findViewById(R.id.webView1);

    configureWebview();

}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();

    webView.loadUrl("http://www.xxxxxxx.com/qadir/");

}

private void configureWebview() {

    webView.setPadding(0, 0, 0, 0);
    webView.setInitialScale(myFunctions.setWebViewScale());
    webView.getSettings().setDefaultZoom(ZoomDensity.FAR);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setCacheMode(MODE_APPEND);

    webView.setWebViewClient(new MyWebViewClient());

}

private class MyWebViewClient extends WebViewClient {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        return super.shouldOverrideUrlLoading(view, url);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);
    }
}

 }

请注意,我已经在我的 webview 中启用了 javascript。

但它没有调用我的 javascript 函数openFileDialog()

还有一件事。每当我在默认的 android 浏览器中加载我的这个网页时,它都能正常工作。我哪里做错了。请检查我的 webview 的设置。

4

4 回答 4

3

如果您将 targetSdkVersion 设置为 17 或更高版本,则必须将 @JavascriptInterface 注释添加到您希望网页代码可用的任何方法(该方法也必须是公共的)。如果您不提供注释,则在 Android 4.2 或更高版本上运行时,您的网页将无法访问该方法。

于 2013-11-08T08:13:04.433 回答
0

改变这个:

<a href="javascript:;" onclick="openFileDialog();">Shujaat</a>

到:

<a href="javascript:void(0)" onclick="openFileDialog()">Shujaat</a>
于 2013-11-08T09:30:45.780 回答
0

试试这个:

在您的 java 代码中(之前webView.setWebViewClient(new MyWebViewClient());

webView.setWebChromeClient(new WebChromeClient());

在您的 HTML 代码中:

<a href="javascript:openFileDialog()">Shujaat</a>
于 2013-11-08T09:53:36.273 回答
0

尝试将 Chrome 客户端设置为 webview 并覆盖 Chrome 客户端中的 onJsAlert 方法,如下所示。

            webView.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                    return super.onJsAlert(view, url, message, result);
                }
            });
于 2015-07-08T11:11:30.400 回答