如何从inappbrowser的executeScript方法内部调用方法

时间:2018-07-16 06:16:34

标签: cordova inappbrowser

要在executeScript内部调用的方法,如下所示。

function any-method(){ 
    alert("method called");
}

inAppBrowserRef.executeScript({ 
     code: "any-method()"
},executeScriptCallBack);

1 个答案:

答案 0 :(得分:1)

您作为code的{​​{1}}参数传递的字符串是在InviewBrowser窗口内打开的Webview范围内解析和执行的,该Webview与您的Webview完全不同Cordova应用程序正在运行。因此,您不能只在Cordova应用程序Webview和InappBrowser Webview之间共享代码。

在您已说明的简单情况下,需要将函数内联到executeScript参数字符串中:

code

注意:

  • 使用反斜杠转义的行结束符,可将字符串拆分为多行,而无需使用inAppBrowserRef.executeScript({ code: "(function(){ \ alert(\"method called\"); \ })();" },executeScriptCallBack); 运算符将其连接起来
  • 字符串中的任何双引号都必须反斜杠转义
  • 这将导致警报显示在InappBrowser Web视图中,而不是Cordova应用Web视图中

要在Cordova应用程序Webview的上下文中显示警报,请使用+的回调函数参数,例如:

executeScript

如果要调用的函数已经存在于正在加载到InappBrowser中的页面中,那么您当然可以调用它并从中返回值:

iab_page.html:

var a = 1,
    b = 2;

inAppBrowserRef.executeScript({ 
     code: "(function(){ \
        return "+a+"+"+b+"; \
     })();"
},function(values){
    var result = values[0];
    alert("Result: "+result); // Result: 3
});

Cordova应用代码:

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <script type="text/javascript">
            function getResult(x, y){
                return x + y;
            }
        </script>

        <h1>Inappbrowser content page</h1>
    </body>
</html>