尝试在cordova中打开远程页面时遇到问题。
我尝试使用InAppBrowser
插件打开远程页面无呼叫本机方法。
我检查了官方文件。
InAppBrowser
不允许访问本地方法,但是我需要实现此功能。
您能帮助我了解如何执行此操作或获得解决方法吗?
答案 0 :(得分:1)
postMessage API已将cordova-plugin-inappbrowser的仿真添加到Android和iOS的this PR中,使您能够将加载到InappBrowser Webview中的页面中的消息发布回主Cordova。应用运行所在的Webview。使用此功能,您可以从加载到InappBrowser中的页面调用应用程序中的“本机方法”。
latest release version on npm(v3.0.0
)中尚未提供此功能,因此您需要直接从Github master分支(v3.1.0-dev
)上安装插件:
cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser
在您的Cordova应用程序代码中,您将添加代码以侦听来自InappBrowser的消息,例如:
var inAppBrowserRef = cordova.InAppBrowser.open('http://www.mypage.com', '_blank');
inAppBrowserRef.addEventListener('message', function (params){
if(params.data.action === "myNativeMethod"){
// Call your native method
myApp.myNativeMethod();
}
});
然后在将网页加载到InappBrowser中时,您将发送消息:
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function(){
var message = {action: "myNativeMethod"};
webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify(message));
}, false);
</script>
如果您无法直接控制要加载到InappBrowser中的页面,则可以注入代码以发送消息:
inAppBrowserRef.executeScript({ code: '\
var message = {action: "myNativeMethod"};\
webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify(message));'
});