猿问

JS 函数无法识别 JavaScript 接口方法

我遇到了以下问题。网页中有一部分:


    document.getElementById('continueButton').addEventListener('click', function () {

        window.parent.postMessage('PAYLANDS-ERROR', '*');


        if (window.parent.HTMLOUT) {

            window.parent.HTMLOUT.paylandsFail();

        }

    });

这是我的界面,其中包含带有注释 @JavascriptInterface 的方法:


interface IAddCard3dsJavaScript {


    @JavascriptInterface

    fun paylandsSuccess()


    @JavascriptInterface

    fun paylandsFail()


    companion object {

        const val INTERFACE_NAME = "HTMLOUT"

    }


}

有一个类实现了这个接口:


class AddCard3dsJavaScript(private val presenter: IAddCard3dsCallback) : IAddCard3dsJavaScript {


    override fun paylandsSuccess() {

        presenter.onPaylands3dsSuccess()

    }


    override fun paylandsFail() {

        presenter.onPaylands3dsFailed()

    }


}

但是当我运行该应用程序时,我在控制台中看到了这一行Uncaught TypeError: window.parent.HTMLOUT.paylandsFail is not a function:我尝试将接口名称更改为window.parent.HTMLOUT而不是HTMLOUT,在这种情况下,我没有收到错误,但paylandsFail 方法体没有执行。那么,问题是什么以及如何解决呢?


UPD


这是我如何将此接口添加到 webview 的方法:


@SuppressLint("JavascriptInterface")

    override fun loadUrlFor3ds(url: String) {

        addCardWebView?.apply {

            addJavascriptInterface(AddCard3dsJavaScript(getController()), IAddCard3dsJavaScript.INTERFACE_NAME)

            loadUrl(url)

        }

    }


天涯尽头无女友
浏览 109回答 1
1回答

一只名叫tom的猫

通过添加注释@JavascriptInterface来修复AddCard3dsJavaScript-IAddCard3dsJavaScript实现
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答