webview执行本地网页的js脚本报错

蓝翼梦 2011-12-08 04:12:24
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根本没法执行,一定需要交互才行?

...全文
468 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝翼梦 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ncuboy045wsq 的回复:]

首先你要webview.getWebSetting().setJavaScriptEnabled(true)让android支持js脚本
Java code

private WebView mWebView;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setCont……
[/Quote]

我就是不知道什么时候需要添加js接口,供html调用。一定要用android调用html实现的js方法,脚本才会执行吗?就直接html调用里面的js好像也执行了。这样不是更方便? 但有些好像又不能执行.

onclick="document.getElementById(’output’).innerHTML=demo.mydata()"这句好像别人写的都没有"="前面部分,前面这部分什么意思啊.
呵呵,可能我的问题比较白痴,没办法了,我都没学过,老板就给个项目让我改,唉
蓝翼梦 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dinjay 的回复:]

调用一下webview的setJavaScriptEnabled设置为true再试试
[/Quote]

我是这么设置的哦,有一两个虽然报错,好像也执行了
蓝翼梦 2011-12-09
  • 打赏
  • 举报
回复
哦,这样啊,那我先去看看
安卓机器人 2011-12-09
  • 打赏
  • 举报
回复
首先你需要了解: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
安卓机器人 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bobierbo 的回复:]

引用 2 楼 ncuboy045wsq 的回复:

首先你要webview.getWebSetting().setJavaScriptEnabled(true)让android支持js脚本
Java code

private WebView mWebView;
@Override
public void onCreate(Bundle icicle) {
super.onCre……
[/Quote]

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>
安卓机器人 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bobierbo 的回复:]

引用 2 楼 ncuboy045wsq 的回复:

首先你要webview.getWebSetting().setJavaScriptEnabled(true)让android支持js脚本
Java code

private WebView mWebView;
@Override
public void onCreate(Bundle icicle) {
super.onCre……
[/Quote]
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();我没有测试过,希望你可以测试一下
安卓机器人 2011-12-08
  • 打赏
  • 举报
回复
首先你要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
非常适合初学者
dinjay 2011-12-08
  • 打赏
  • 举报
回复
调用一下webview的setJavaScriptEnabled设置为true再试试

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧