addJavaScriptInterfaceを使用して、オブジェクト「myObj」をWebビューに挿入しています。ここにコードの一部
private void portalInit() {
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
wv.getSettings().setAllowContentAccess(true);
wv.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage cm) {
Log.d("From JavaScript",
cm.message() + " -- From line " + cm.lineNumber()
+ " of " + cm.sourceId());
return true;
}
});
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
wv.addJavascriptInterface(new myObj(this, wv), "myOBJ");
wv.loadUrl("http://dl.dropbox.com/u/16515769/gradient.html");
wv.requestFocus(View.FOCUS_DOWN);
}
そして、私は変更できないHTMLページを持っています。
<script>
function f1(){
this.do1 = function(par){
console.log("1: "+par);
};
this.do2 = function(num){
console.log("2: "+num);
};
}
function f2(){
this.do3 = function(par){
console.log("3: "+par);
};
this.do4 = function(num){
console.log("4: "+num);
};
}
var myobj;
var myobj_e = myOBJ;
f1.prototype = myobj_e;
f2.prototype = new f1();
myobj = new f2();
function keydown(e){
var key = e.keyCode || e.which;
switch(key){
case 13:
myobj.Debug("turn it on!!!!");
break;
case 27:
myobj.do1("turn it on!!!!");
break;
case 49:
myobj.do4("fsdfd")
break;
}
}
この構造は、オブジェクトが実際のWebkitブラウザーに挿入されたハードウェアデバイスでは正常に機能しますが、Android Webビューでは機能せず、myobjにアクセスします。logcatのデバッグ投稿エラー(Javascriptエラー)
Uncaught ReferenceError: NPMethod called on non-NPObject -- From line 36 of http://dl.dropbox.com/u/16515769/gradient.html
注:javascript myOBJ.Debug( "something");を呼び出す場合 正常に動作するので、「f1.prototype=myobj_e;」の部分だと思います。動作していません。
私はいくつかの助けを得ることができてとてもうれしいです。