未捕获的ReferenceError:myFunction未在null处定义:webview中的Android异常1



我正在从一个活动调用javascript函数,但收到Uncaught ReferenceError: myFunction is not defined at null:1错误。这是我的文件

主要活动.java

package com.example.androidexample;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView webview = (WebView)this.findViewById(R.id.webView1);
        WebSettings webSettings = webview.getSettings();
        // Enable Javascript for interaction
        webSettings.setJavaScriptEnabled(true);
        // Make the zoom controls visible
        webSettings.setBuiltInZoomControls(true);
        // Allow for touching selecting/deselecting data series
        webview.requestFocusFromTouch();
        // Set the client
        webview.setWebViewClient(new WebViewClient());
        webview.setWebChromeClient(new WebChromeClient());

        //webview.loadUrl("file:///android_asset/test.html");
        /*String str = "<books>" +
                "<book title="A Tale of Two Cities"/>" +
                "<book title="1984"/>" +
                "</books>";*/


        webview.loadUrl("file:///android_asset/test.html");
        webview.loadUrl("javascript:myFunction()");
        //webview.loadUrl("javascript:myFunction("+str+")");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }    
}

test.html

<html>
<body>
<script type="text/javascript" src="marknote.js"></script>
<script type="text/javascript">
function myFunction()
{
var str = '<books><book></book></books>';
var parser = new marknote.Parser();
var doc = parser.parse(str);
var bookEls = doc.getRootElement().getChildElements();
    for (var i=0; i<bookEls.length; i++) {
        var bookEl = bookEls[i];
        alert("Element name is " + bookEl.getName());
    }
}
</script>
</body>
</html>

我在使用webview.loadUrl("javascript:myFunction()");时看到了此错误。我想从java传递一个xml字符串,并将其解析为javascript。请帮我找到解决方案。

当页面加载时,您应该执行javascript

webview.setWebViewClient(new WebViewClient(){
    public void onPageFinished(WebView view, String url){   
        webview.loadUrl("javascript:myFunction()");
    }           
});

代码将被执行,并将找到您的javascript函数。你现在的做法不会等待。

这个只需要更改参数设置顺序就可以了

package com.example.androidexample;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WebView webview = (WebView)this.findViewById(R.id.webView1);
        WebSettings webSettings = webview.getSettings();
        // Enable Javascript for interaction
        webSettings.setJavaScriptEnabled(true);
        // Make the zoom controls visible
        webSettings.setBuiltInZoomControls(true);
        // Allow for touching selecting/deselecting data series
        webview.requestFocusFromTouch();
        // Set the client
//        webview.setWebViewClient(new WebViewClient());
//        webview.setWebChromeClient(new WebChromeClient());


        final String str = "<books>" +
                "<book title="A Tale of Two Cities"/>" +
                "<book title="1984"/>" +
                "</books>";

//        webview.loadUrl("file:///android_asset/test.html");
        webview.setWebChromeClient(new WebChromeClient());
        webview.setWebViewClient(new WebViewClient() 
        {
            public void onPageFinished(WebView view, String url)
            {
                webview.loadUrl("javascript:myFunction('"+str+"')");
            }
        }
            );
        webview.loadUrl("file:///android_asset/test.html");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }    
}

最新更新