作者erspicu (.)
看板AndroidDev
标题[问题] javascript invoke npobject处理问题
时间Mon Dec 23 23:25:38 2013
app的webview与网页上的javascipt互动
互动方式我是知道
问题是 javascript call 外部程式物件的method
用到某些东西 常常会跑出 npobject 讯息的错误
查了一下 要用
Handler mHandler = new Handler();
mHandler.post(new Runnable()
{
public void run()
{
//某些导致 NPOBJECT ERROR的CODE要放这里
}
});
问题是这样一用後有几个问题
1.变成非同步,需要一个waiting机制
2.如何把param导入,和何把param倒出
似乎变数只要一进 mHandler 内 ,一取用马上又跑出npobject讯息....
举个例子来说
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
这个如果不放在mHandler.post内去跑 马上 npobect错误....
逼着我直接使用sokcet来发送 http request ......
下面更多说明
javascipt内
alert( window.api_obj.propfind_query("url" ,"","") );
mainactivity内
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new androidobj(), "api_obj");
//上面建立一个javascipt存取介面给网页的javascipt call
webView.loadUrl("file:///android_asset/www/index.html");
public class androidobj
{
public String propfind_query()
{
这里如果有用到
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
要用handler 不然会 npobject error
但是用了hander後 所取到的东西不能return
如果用finial 这招 变数进入 handler 在外部曲用又会npobject
不知道如何return 和导入 params
最後直接用socket来处理request
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.70.105.149
1F:→ TonyQ:问题是 npobject 到底怎麽来的... 12/24 00:01
这问题还在看 目前还没看到有文章写得很清楚的
有一篇
http://blog.csdn.net/onlyou930/article/details/6530248
但看不是很懂
又看到一篇
http://blog.csdn.net/lymon01/article/details/6641496
这里可以看到,NPObject就是NPClass的封装,代表了js的物件本质就是一组函数
webview内的javascript call外部的method
目前遇到只要method中有用到 HttpURLConnection class的就会跳出这讯息
解决法参考
http://www.xuephp.com/main/detail.php?cid=34319
但原因跟细节都没交代得很清楚
这背後应该是不少文章
2F:→ TonyQ:跟碰到 npobject 时你打算怎麽处理 or 怎麽避免他 12/24 00:01
这就是我想问的 以我的问题 我是有解
HttpURLConnection不能用
乾脆自己靠更底层的socket来发request
但是想说有没有比较简单的解法
3F:→ TonyQ:这些东西没写,我们就根本无法讨论啊... 12/24 00:01
4F:→ kai7450:我个人的作法是先sync资料在用callback的方法去call js真 12/24 10:49
5F:→ kai7450:正要做的事,ex:setWebsyncData(callback) 12/24 10:50
6F:→ Elfiend:把所有操作放到service里,用notification传递结果呢? 12/24 11:44
我有用过local service,但是不是用notification来传递结果,
用物件bind的方式来拿method的return值,但是还是一样的状况
service的method如果有用到HttpURLConnection,还是一样npobject报错,
所以我想主要还是 HttpURLConnection 这东西有某些跟js线程上的冲突.
其实也没差拉,只是socket发request烦一点而已,
而且我的功能很可能须要socket客制发送,因为是对应webdav的一些特殊操作method,
像MKCOL PROPFIND 等等,HttpURLConnection好像不支援这些操作method的设定.
※ 编辑: erspicu 来自: 118.171.242.218 (12/24 11:59)