javascript - 理解Android webview javascript接口(interface)

标签 javascript java android webview

我创建了一个 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/

相关文章:

javascript - 将鼠标悬停在谷歌图表上,在 Firefox 上表现得很奇怪

java - 如何在 Spring-Batch 中使用 ItemReader 跳过行?

java - 线程 "main"java.lang.UnsupportedClassVersionError : Bad version number in . 类文件中的 Tinyos 异常

android - 将来自不同 Firebase 项目的两项 Firebase 服务用于一个移动应用程序

android - 为什么没有调用微调器中的 onNothingSelected?

javascript - 在函数上使用 .apply 的问题

javascript - TypeError : (intermediate value)(. ..) 未定义

javascript - 如何仅在开头标签中为颜色添加值

java - 对于 Android 应用程序,使用 java.net 或 java.nio 进行网络通信哪种方法更好

android - android中的xml文件出错