window.postMessage в script.google.com как всплывающее окно

#javascript #google-apps-script

#javascript #google-apps-script

Вопрос:

При запуске: MyPopWindow.postMessage(«Test», ‘mydomaine‘); У меня ошибка в MyPopWindow с script.google.com:

(программа): 1 Не удалось выполнить ‘postMessage’ в ‘DOMWindow’: предоставленный целевой источник (‘mydomaine‘) не соответствует источнику окна получателя (‘https://script.google.com ‘).

При запуске: MyPopWindow.postMessage(«Тест», ‘https://script.google.com ‘); У меня ошибка в MyPopWindow:

удаление postMessage .. было с хоста mydomaine, но ожидаемый хост https : // ******-script.googleusercontent.com

Источник на странице в mydomaine:

   window.addEventListener("DOMContentLoaded", function() {
    window.addEventListener("message", function(e) {
        // wait for child to signal that it's loaded.
        if ( e.data === "loaded" amp;amp; e.origin === iframe.src.split("/").splice(0, 3).join("/")) {
            // send the child a message.
            alert(e.data);
        }
    })
}, false)  

Источник в моем скрипте Google Apps, работающем как WebApp:

         document.addEventListener('DOMContentLoaded', function () {
            // signal the parent that we're loaded.
            window.parent.postMessage("loaded", "*");
            
            // listen for messages from the parent.
            window.addEventListener("message", function(e) {
            if(event.origin !== 'mydomain') return;
                  var message = e.data;
                  alert(message);
            }, false);
        });  

Ответ №1:

Это сообщение об ошибке поступает из одного из файлов драйверов Javascript скриптов приложения. Это дополнительная защита, добавленная Google, чтобы люди не могли использовать систему postMessage.

Похоже, Google хочет заставить вас использовать один из их принятых протоколов для связи между окнами / доменами, а именно API выполнения. Я пробовал другие методы, такие как передача параметров URL, но пока ни один из них не работал, потому что я не мог получить к ним доступ из iframe, в котором запускаются все скрипты приложений.

Я считаю, что API выполнения — ваш лучший выбор.

Комментарии:

1. Да, вы правы. «Я считаю, что API выполнения — ваш лучший выбор». — нет: P

2. как бы вы использовали API выполнения для связи между iframe (встроенным веб-приложением) и основным доменом? Я немного потерялся здесь?