我创建了一个 android WebView
,并使用 addJavascriptInterface(mObject, "jsinterface")
注入(inject)了 javascript
接口(interface)。它工作正常,直到我使用 new
运算符在 JavaScript 中创建一个具有相同名称 (jsinterface) 的对象。
我的 Java 代码:
WebView mWebView = findViewById(R.id.myWebView);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new MyWebChromeClient((Activity)mContext));
mWebView.addJavascriptInterface(new testClass(), "jsinterface");
mWebView.loadUrl("UrlToLoad");
测试类.java
public class testClass{
public testClass() {
}
@JavascriptInterface
public String testNativeMethod() {
return "Java method called!!";
}
}
我的 Java 脚本代码
测试.js
function test(msg){
this.message = msg;
this.testJSMethod = function(){
return this.message;
}
}
alert(jsinterface.testNativeMethod()); // prints Java method called!!
jsinterface= new test("JS method called...");
alert(jsinterface.testJSMethod()); // prints JS method called...
alert(jsinterface.testNativeMethod()); // errors "NPMethod called on non- NPObject"
问题:
javascript
对象是否可以同时访问两者,即 javascript
方法和 native JAVA
方法(通过 javascript接口(interface)
)?是否有可能将任何属性设置为 webview
或执行任何 JS script
来完成此操作?
最佳答案
想想 javascript 中的 document
。当您在 Web 浏览器中时,这是一个您可以随时访问的全局对象。如果您创建自己的新
var 名为document
,您将无法访问全局document
。
当你执行这一行时:
mWebView.addJavascriptInterface(new testClass(), "jsinterface");
您正在添加一个名为 jsinterface
的全局对象。这与 document
的情况相同。如果您创建一个具有相同名称的 var,它将覆盖现有的全局引用。
将 javascript 接口(interface)添加到 WebView
后,您无需创建对该接口(interface)的新
引用。 addJavascriptInterface
已经为您完成了。
关于javascript - 理解Android webview javascript接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36864811/