Skip to content

Instantly share code, notes, and snippets.

@1fabiopereira
Last active May 3, 2018 14:45
Show Gist options
  • Select an option

  • Save 1fabiopereira/c950dfbb4433585589936184ae7037fc to your computer and use it in GitHub Desktop.

Select an option

Save 1fabiopereira/c950dfbb4433585589936184ae7037fc to your computer and use it in GitHub Desktop.

Revisions

  1. 1fabiopereira revised this gist May 3, 2018. 1 changed file with 0 additions and 2 deletions.
    2 changes: 0 additions & 2 deletions webViewBridge.js
    Original file line number Diff line number Diff line change
    @@ -40,9 +40,7 @@

    // Recebe mensagem do React-Native
    window.document.addEventListener('message', (e) => {

    console.log('message received from react native');
    window.webViewBridge.send('logger', {payload: e}, null, null);

    let message;

  2. 1fabiopereira revised this gist May 1, 2018. 1 changed file with 11 additions and 5 deletions.
    16 changes: 11 additions & 5 deletions webViewBridge.js
    Original file line number Diff line number Diff line change
    @@ -62,19 +62,25 @@
    // Gatilho para o callback
    if (message.args && callbacks[message.msgId]) {
    if (message.isSuccessfull) {
    callbacks[message.msgId].onsuccess.apply(null, message.args);
    try {
    callbacks[message.msgId].onsuccess.apply(null, message.args);
    } catch (err) {};
    } else {
    callbacks[message.msgId].onerror.apply(null, message.args);
    try {
    callbacks[message.msgId].onerror.apply(null, message.args);
    } catch (err) {};
    }

    delete callbacks[message.msgId];
    }

    // Executa funções internas
    if (message.action && message.payload) {
    if (Object.prototype.hasOwnProperty.call(actionMap, message.action)) {
    actionMap[message.action](message.payload);
    }
    if (Object.prototype.hasOwnProperty.call(actionMap, message.action)) {
    try {
    actionMap[message.action](message.payload);
    } catch (err) {};
    }
    }
    });
    };
  3. 1fabiopereira revised this gist May 1, 2018. 1 changed file with 7 additions and 0 deletions.
    7 changes: 7 additions & 0 deletions webViewBridge.js
    Original file line number Diff line number Diff line change
    @@ -69,6 +69,13 @@

    delete callbacks[message.msgId];
    }

    // Executa funções internas
    if (message.action && message.payload) {
    if (Object.prototype.hasOwnProperty.call(actionMap, message.action)) {
    actionMap[message.action](message.payload);
    }
    }
    });
    };

  4. 1fabiopereira revised this gist Apr 30, 2018. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions webViewBridge.js
    Original file line number Diff line number Diff line change
    @@ -40,7 +40,10 @@

    // Recebe mensagem do React-Native
    window.document.addEventListener('message', (e) => {

    console.log('message received from react native');
    window.webViewBridge.send('logger', {payload: e}, null, null);

    let message;

    try {
  5. 1fabiopereira created this gist Apr 25, 2018.
    73 changes: 73 additions & 0 deletions webViewBridge.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,73 @@
    (function () {
    let promiseChain = Promise.resolve();

    const promises = {};
    const callbacks = {};

    const init = () => {

    // Gera o uuid da msg
    const guid = () => {
    const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
    return String(s4()).concat(String(s4()), "-", String(s4()), "-", String(s4()), "-", String(s4()), "-", String(s4()), String(s4()), String(s4()));
    };

    window.webViewBridge = {

    // Envia uma mensagem para o lado do React-Native
    send (targetFunc, data = {}, success = () => {}, error = () => {}) {
    const msgObj = {
    targetFunc,
    data,
    msgId: guid(),
    };

    var msg = JSON.stringify(msgObj);

    promiseChain = promiseChain.then(() => new Promise((resolve, reject) => {
    console.log('sending message ' + msgObj.targetFunc);
    promises[msgObj.msgId] = { resolve: resolve, reject: reject };
    callbacks[msgObj.msgId] = {
    onsuccess: success,
    onerror: error
    };
    window.postMessage(msg);
    })).catch((e) => {
    console.error('webViewBridge send failed ' + e.message);
    });
    }
    };

    // Recebe mensagem do React-Native
    window.document.addEventListener('message', (e) => {
    console.log('message received from react native');
    let message;

    try {
    message = JSON.parse(e.data);
    } catch (err) {
    console.error("failed to parse message from react-native".concat(err));
    return;
    }

    // Resolve promise - e envia a proxima mensagem se disponível
    if (promises[message.msgId]) {
    promises[message.msgId].resolve();
    delete promises[message.msgId];
    }

    // Gatilho para o callback
    if (message.args && callbacks[message.msgId]) {
    if (message.isSuccessfull) {
    callbacks[message.msgId].onsuccess.apply(null, message.args);
    } else {
    callbacks[message.msgId].onerror.apply(null, message.args);
    }

    delete callbacks[message.msgId];
    }
    });
    };

    init();
    }());