webview执行本地网页的js脚本报错,脚本是别人写的,在PC机上可以执行,而且这些错误应该是不存在的,但webview执行报错:
12-08 02:35:10.550: E/Web Console(1099): Uncaught ReferenceError: MM_swapImage is not defined at file:////mnt/nand/Yiyo/info_temp/Item3/nopw_index.html:27
12-08 02:35:10.710: E/Web Console(1099): Uncaught TypeError: Object CNLTreeMenu2 has no method 'getElementsByTagName' at file:////mnt/nand/Yiyo/info_temp/Item3/qk1.html:80
12-08 02:35:12.740: E/Web Console(1099): Uncaught TypeError: Object CNLTreeMenu2 has no method 'getElementsByTagName' at file:////mnt/nand/Yiyo/info_temp/Item3/xiaohua.html:80
12-08 02:35:14.000: E/Web Console(1099): Uncaught TypeError: Object [object DOMWindow] has no method 'attachEvent' at file:////mnt/nand/Yiyo/info_temp/Item3/qk2-xiaohua.html:128
12-08 02:35:15.490: E/Web Console(1099): Uncaught TypeError: Cannot set property 'URL' of null at file:////mnt/nand/Yiyo/info_temp/Item3/qk2-xiaohua.html:80
我新手啊,看到很多介绍webview和js交互的的例子,但我也不知道什么时候该交互调用,是不是这些错误造成的原因是像alert()一样webview根本没法执行,一定需要交互才行?
 

解决方案 »

  1.   

    调用一下webview的setJavaScriptEnabled设置为true再试试
      

  2.   

    首先你要webview.getWebSetting().setJavaScriptEnabled(true)让android支持js脚本private WebView mWebView; 
    @Override 
    public void onCreate(Bundle icicle) { 
        super.onCreate(icicle); 
        setContentView(R.layout.main); 
        mWebView = (WebView) findViewById(R.id.webview);     WebSettings webSettings = mWebView.getSettings(); 
        webSettings.setSavePassword(false); 
        webSettings.setSaveFormData(false); 
        webSettings.setJavaScriptEnabled(true); 
        webSettings.setSupportZoom(true);    mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); //添加js接口,这里是demo,供html调用,调用的方式是:window.接口名(这里是demo).方法名(接口中的方法)    mWebView.loadUrl("file:///android_asset/demo.html"); ///demo.html文件放在assets目录下
       //android调用js方法
       //mWebView.loadUrl( javascript:fillContent()");//注意这里的fillContent()方法是在html实现的js方法
    } final class DemoJavaScriptInterface {     DemoJavaScriptInterface() { 
        } 
        public int mydata(){ 
            return 10; 
        } 
    }上面是android代码部分<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Insert title here</title> 
    </head> 
        <body>这是一个html页面 
        <div id="output" >test</div> 
            <input type="submit" value="buttons" 
    //     js调用android方法,调用方式window.接口名.方法名
            onclick="document.getElementById(’output’).innerHTML=demo.mydata()"/> 
        </body> 
    </html>上面的代码备有注释,你可以去研究下,另外介绍一个帖子,你会喜欢的http://www.eoeandroid.com/forum.php?mod=viewthread&tid=66218
    非常适合初学者
      

  3.   


    我就是不知道什么时候需要添加js接口,供html调用。一定要用android调用html实现的js方法,脚本才会执行吗?就直接html调用里面的js好像也执行了。这样不是更方便? 但有些好像又不能执行.onclick="document.getElementById(’output’).innerHTML=demo.mydata()"这句好像别人写的都没有"="前面部分,前面这部分什么意思啊.
    呵呵,可能我的问题比较白痴,没办法了,我都没学过,老板就给个项目让我改,唉
      

  4.   

    html代码中运行js方法应该很简单,要在android调用js调用就是通过mWebView.loadUrl("javascript:fillContent()");请注意前面的javascript:是固定的,fillContent()是在html中用js些的方法名,例如:function fillContent(){
       window.demo.log();
    }
    上面是调用android代码中的log();public void log(){
    log.v("temp","here is called from javascript");
    }可以在Activity的onCreate()方法添加js的接口,添加方法如下:mWebView. addJavascriptInterface(new 类名(),接口名);
    //注意这里的类名可以是任何类,如果是当前activity本身,则可以用this代替,那么就要注意了
    //js可以调用的方法必须是指定类的方法,否则会出现错误而只有WebView才能添加Javascript接口,所以你的界面应该是一个Activity,包含WebView
    关于demo.mydata();就可以调用,而不需要window.demo.mydata();我没有测试过,希望你可以测试一下
      

  5.   


    onclick="document.getElementById(’output’).innerHTML=demo.mydata()"
    document.getElementById("output").innerHTML这句是通过document找到id为output的元素,innerHTML把demo.mydata()以html的形式内嵌进标签
    上面的html页面会发生变化<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Insert title here</title> 
    </head> 
        <body>这是一个html页面 
        <div id="output" >test</div> //这里的test会被window.demo.mydata()所取代
    //而mydata在android会返回10,所以这里<div id="output">10</div>
            <input type="submit" value="buttons" 
    //     js调用android方法,调用方式window.接口名.方法名
            onclick="document.getElementById(’output’).innerHTML=demo.mydata()"/> 
        </body> 
    </html>
      

  6.   

    首先你需要了解:javascript和HTML DOM:官方网站:http://www.w3school.com.cn/js/index.asp
    然后需要了解android的WebView:http://developer.android.com/reference/android/webkit/WebView.html
    官方指导教程:http://developer.android.com/guide/webapps/webview.html
    WebView的官方Sample:http://developer.android.com/resources/articles/using-webviews.html
    我给你发的那个帖子是别人初学者的心得体会你可以去看下:ttp://www.eoeandroid.com/forum.php?mod=viewthread&tid=66218