javascript window.postMessage到script.google.com作为弹出窗口

xmjla07d  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(100)

运行时:MyPopWindow.postMessage(“Test”,'mydomaine');我在MyPopWindow上遇到错误script.google.com:
(程序):1无法在“DOMWindow”上执行“postMessage”:提供的目标原点('mydomaine')与收件人窗口的原点('https://script.google.com')不匹配。
运行时:MyPopWindow.postMessage(“Test”,'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" && 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);
        });
jogvjijk

jogvjijk1#

此错误消息来自应用程序脚本Javascript driver files之一。这是谷歌增加的额外安全措施,以防止人们使用postMessage系统。
Google似乎想强迫你使用他们接受的Windows/域之间通信协议之一,即Execution API。我尝试过其他方法,比如传递URL参数,但到目前为止没有一个有效,因为我无法从所有应用程序脚本运行的iframe中访问它们。
我相信执行API是你最好的选择。

svdrlsy4

svdrlsy42#

要从Google apps Scriptwindow/iframe向父窗口**发送消息,我发现下面的代码对我来说是有效的;

if(window.parent.parent !== window.top){
window.top.postMessage("Test", "mydomaine");
};

可悲的是,我还没有,至少还没有,找到一种方法从父窗口发送消息到Google应用程序脚本窗口/iframe。
------编辑-------
我在**从父窗口向iframe发送消息时找到了解决方案!**其实很简单

父窗口编码;

fetch('your google apps scipt webapp url', {
  method: 'POST',
  body: JSON.stringify('the message you want to send to the 
  iframe')
  })
  .then(response => {
  if (response.ok) {
  console.log('String sent successfully to Google Apps 
  Script');
  } else {
  console.error('Error sending string to Google Apps 
  Script');
  }
  })
  .catch(error => {
  console.error('Error:', error);
  });

Google apps脚本中.gs文件的代码;

function doPost(request) {
    var payload = JSON.parse(request.postData.contents);
    userProperties.setProperty('gotsessionid', payload);
    }

相关问题