(iOS & Android) Add postMessage API support (#362)
<!-- Please make sure the checklist boxes are all checked before submitting the PR. The checklist is intended as a quick reference, for complete details please see our Contributor Guidelines: http://cordova.apache.org/contribute/contribute_guidelines.html Thanks! --> ### Platforms affected Android iOS (both UIWebView & WKWebView implementations) ### What does this PR do? Adds support for [postMessage API](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) enabling pages loaded into the InappBrowser to post messages back to the parent Webview of the Cordova app. For example, sending event messages associated with UI interactions such as button clicks from the wrapped page back to the parent app Webview. ### What testing has been done on this change? Automated tests have been extended to cover the `message` event. ### Checklist - [x ] Commit message follows the format: "GH-3232: (android) Fix bug with resolving file paths", where CB-xxxx is the JIRA ID & "android" is the platform affected. - [ x] Added automated test coverage as appropriate for this change.
This commit is contained in:
committed by
Jan Piotrowski
parent
0fd43ae644
commit
c54d10052a
@@ -213,6 +213,7 @@ The object returned from a call to `cordova.InAppBrowser.open` when the target i
|
||||
- __loaderror__: event fires when the `InAppBrowser` encounters an error when loading a URL.
|
||||
- __exit__: event fires when the `InAppBrowser` window is closed.
|
||||
- __beforeload__: event fires when the `InAppBrowser` decides whether to load an URL or not (only with option `beforeload=yes`).
|
||||
- __message__: event fires when the `InAppBrowser` receives a message posted from the page loaded inside the `InAppBrowser` Webview.
|
||||
|
||||
- __callback__: the function that executes when the event fires. The function is passed an `InAppBrowserEvent` object as a parameter.
|
||||
|
||||
@@ -238,6 +239,7 @@ function showHelp(url) {
|
||||
|
||||
inAppBrowserRef.addEventListener('beforeload', beforeloadCallBack);
|
||||
|
||||
inAppBrowserRef.addEventListener('message', messageCallBack);
|
||||
}
|
||||
|
||||
function loadStartCallBack() {
|
||||
@@ -252,6 +254,13 @@ function loadStopCallBack() {
|
||||
|
||||
inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });
|
||||
|
||||
inAppBrowserRef.executeScript({ code: "\
|
||||
var message = 'this is the message';\
|
||||
var messageObj = {my_message: message};\
|
||||
var stringifiedMessageObj = JSON.stringify(messageObj);\
|
||||
webkit.messageHandlers.cordova_iab.postMessage(stringifiedMessageObj);"
|
||||
});
|
||||
|
||||
$('#status-message').text("");
|
||||
|
||||
inAppBrowserRef.show();
|
||||
@@ -300,11 +309,15 @@ function beforeloadCallback(params, callback) {
|
||||
|
||||
}
|
||||
|
||||
function messageCallback(params){
|
||||
$('#status-message').text("message received: "+params.data.my_message);
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### InAppBrowserEvent Properties
|
||||
|
||||
- __type__: the eventname, either `loadstart`, `loadstop`, `loaderror`, or `exit`. _(String)_
|
||||
- __type__: the eventname, either `loadstart`, `loadstop`, `loaderror`, `message` or `exit`. _(String)_
|
||||
|
||||
- __url__: the URL that was loaded. _(String)_
|
||||
|
||||
@@ -312,6 +325,8 @@ function beforeloadCallback(params, callback) {
|
||||
|
||||
- __message__: the error message, only in the case of `loaderror`. _(String)_
|
||||
|
||||
- __data__: the message contents , only in the case of `message`. A stringified JSON object. _(String)_
|
||||
|
||||
|
||||
### Supported Platforms
|
||||
|
||||
@@ -323,7 +338,11 @@ function beforeloadCallback(params, callback) {
|
||||
|
||||
### Browser Quirks
|
||||
|
||||
`loadstart` and `loaderror` events are not being fired.
|
||||
`loadstart`, `loaderror`, `message` events are not fired.
|
||||
|
||||
### Windows Quirks
|
||||
|
||||
`message` event is not fired.
|
||||
|
||||
### Quick Example
|
||||
|
||||
@@ -344,6 +363,7 @@ function beforeloadCallback(params, callback) {
|
||||
- __loadstop__: event fires when the `InAppBrowser` finishes loading a URL.
|
||||
- __loaderror__: event fires when the `InAppBrowser` encounters an error loading a URL.
|
||||
- __exit__: event fires when the `InAppBrowser` window is closed.
|
||||
- __message__: event fires when the `InAppBrowser` receives a message posted from the page loaded inside the `InAppBrowser` Webview.
|
||||
|
||||
- __callback__: the function to execute when the event fires.
|
||||
The function is passed an `InAppBrowserEvent` object.
|
||||
|
||||
Reference in New Issue
Block a user