Cordova InAppBrowser открыть удаленную страницу suport вызов родной метод? - PullRequest
0 голосов
/ 27 февраля 2019

Я столкнулся с проблемой при попытке открыть удаленную страницу в Cordova.

Я попытался с помощью плагина InAppBrowser открыть удаленную страницу без вызова собственного метода.

Я проверил официальную документацию,InAppBrowser не разрешает доступ к локальным методам, но мне нужно реализовать эту функцию.

Можете ли вы помочь мне понять, как я могу это сделать или получить подход?

1 Ответ

0 голосов
/ 27 февраля 2019

Эмуляция postMessage API была добавлена ​​в cordova-plugin-inappbrowser для Android и iOS с помощью этого PR , который позволяет вам публиковать сообщения отстраница, загруженная в веб-представление InappBrowser, обратно в основное веб-представление Cordova, где выполняется ваше приложение.Использование этого позволит вам вызывать «собственные методы» в вашем приложении со страницы, загруженной в InappBrowser.

Эта функция еще не в последней версии выпуска на npm (v3.0.0) поэтому вам нужно установить плагин непосредственно из главной ветви Github (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, вы отправите сообщение:

<button id="myButton">Press me</button>
<script type="text/javascript">
    document.getElementById("myButton").addEventListener("click", function(){
        var message = {action: "myNativeMethod"};
        webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify(message));
    }, false);
</script>

Если у вас нет прямого контроля над страницей, загружаемой вInappBrowser, вы можете ввести код для отправки сообщения:

inAppBrowserRef.executeScript({ 
    code: '\
        document.getElementById("myButton").addEventListener("click", function(){\
            var message = {action: "myNativeMethod"};\
            webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify(message));\
        }, false);\
    '
});
...