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

Cordova 如何从inappbrowser的executeScript方法内部调用方法,cordova,inappbrowser,Cordova,Inappbrowser,要在executeScript内调用的方法,如下所示 function any-method(){ alert("method called"); } inAppBrowserRef.executeScript({ code: "any-method()" },executeScriptCallBack); 作为代码参数传递给executeScript的字符串将在InappBrowser窗口内部打开的Webview范围内解析和执行,该窗口与运行Cordova应用程序的W

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

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

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

作为代码参数传递给executeScript的字符串将在InappBrowser窗口内部打开的Webview范围内解析和执行,该窗口与运行Cordova应用程序的Webview完全不同。因此,您不能仅在Cordova app Webview和InApp Browser Webview之间共享代码

在所示的简单示例中,需要将函数内联到代码参数字符串中:

inAppBrowserRef.executeScript({ 
     code: "(function(){ \
        alert(\"method called\"); \
     })();"
},executeScriptCallBack);
注:

反斜杠转义的行尾使您能够跨多行拆分字符串,而无需将其与+运算符连接 字符串中的任何双引号都必须反斜杠转义 这将导致警报显示在InappBrowser网络视图中,而不是Cordova应用程序网络视图中 要在Cordova app Webview的上下文中显示警报,可以使用executeScript的回调函数参数,例如:

var a = 1,
    b = 2;

inAppBrowserRef.executeScript({ 
     code: "(function(){ \
        return "+a+"+"+b+"; \
     })();"
},function(values){
    var result = values[0];
    alert("Result: "+result); // Result: 3
});
如果正在调用的函数已存在于加载到InApp Browser的页面中,则当然可以调用它并从中返回值:

iab_page.html:

<!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>
var a = 1,
    b = 2;

var inAppBrowserRef = cordova.InAppBrowser.open('iab_page.html', '_blank');

inAppBrowserRef.addEventListener('loadstop', function (e) {
    inAppBrowserRef.executeScript({ 
         code: "getResult("+a+","+b+")"
    },function(values){
        var result = values[0];
        alert("Result: "+result); // Result: 3
    });
});