2
回答
android javascript “ Uncaught ReferenceErro”
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
 mWebView = (WebView) findViewById(R.id.webView); 
        mWebView.setWebChromeClient(new MyWebChromeClient());
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.addJavascriptInterface(new Evt(), "evt");
        mWebView.addJavascriptInterface(new Player(), "player");
        
        mWebView.loadUrl("javascript:var iSTB = new Object();iSTB.evt = evt;");
        mWebView.loadUrl("javascript:iSTB.player = player;");
        
        mWebView.loadUrl("javascript:wave()");
        mWebView.loadUrl("file:///android_asset/ui/uitest.html"); 

////uitest.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>UI Test</title>
<script type="text/javascript"> 
        function wave() { 
        evt.debug("++++++++++WEB"); 
        } 
</script>    
</head>
<body>
<script type="text/javascript">
iSTB.evt.debug("++++++++++WEB"); 
iSTB.player.Debug();
</script>
</body>
</html>

版本:froyo-2.2
以下错误是在开发板上运行的结果:
 E/Web Console(1980): Uncaught ReferenceError: evt is not defined at :1
 E/Web Console(1980): Uncaught ReferenceError: player is not defined at :1
E/Web Console(1980): Uncaught ReferenceError: wave is not defined at :1
 E/Web Console(1980): Uncaught TypeError: Cannot call method 'debug' of undefined at file:///android_asset/ui/uitest.html:17

以下错误是在模拟器运行的结果:
 E/Web Console(1980): Uncaught ReferenceError: evt is not defined at :1
 E/Web Console(1980): Uncaught ReferenceError: player is not defined at :1

举报
miyuehu
发帖于5年前 2回/3K+阅
共有2个答案 最后回答: 5年前
mWebView.addJavascriptInterface(new Object() {
    public void clickOnAndroid() {
        mHandler.post(new Runnable() {
            public void run() {						 
                mWebView.loadUrl("javascript:wave()");
            }
        });
    }
}, "evt");

<script type="text/javascript"> 
function wave() { 
    alert("function wave");
} 
</script>

<a onClick="window.evt.clickOnAndroid()">Click me!</a>

你可以参考下

--- 共有 5 条评论 ---
fanl1982回复 @miyuehu : Cannot call method 'debug' of undefined at file:///android_asset/ui/uitest.html:17 这句话应该这么理解,在uitest.html文件中对一个undifined对象调用了debug方法,你需要查看你的对象引用是否为空 5年前 回复
miyuehu回复 @迷途d书童 : 只有一条错误打印,实在不知道怎么解决。网上也没结果。还请多帮帮忙,感谢不尽 5年前 回复
miyuehuE/Web Console(2410): Uncaught TypeError: Cannot call method 'debug' of undefined at file:///android_asset/ui/uitest.html:17 这次是类里面的method找不到?是不是不支持点操作么? 5年前 回复
迷途d书童回复 @miyuehu : iSTB.evt = window.evt; 5年前 回复
miyuehu你好,我想要这样的操作iSTB.evt. ,我应该怎么做? 5年前 回复

引用来自“迷途d书童”的答案

mWebView.addJavascriptInterface(new Object() {
    public void clickOnAndroid() {
        mHandler.post(new Runnable() {
            public void run() {						 
                mWebView.loadUrl("javascript:wave()");
            }
        });
    }
}, "evt");

<script type="text/javascript"> 
function wave() { 
    alert("function wave");
} 
</script>

<a onClick="window.evt.clickOnAndroid()">Click me!</a>

你可以参考下

mWebView.addJavascriptInterface(new Evt(), "evt");
mWebView.addJavascriptInterface(new Player(), "player");
mWebView.loadUrl("javascript:var iSTB = new Object();iSTB.evt = window.evt;");
mWebView.loadUrl("javascript:iSTB.player = window.player;");

结果还是一样:
E/Web Console(2410): Uncaught TypeError: Cannot call method 'debug' of undefined at file:///android_asset/ui/uitest.html:17
这次是类里面的method找不到?是不支持点操作么?

顶部