将Javascript对象传递给HTML iframe(作为对象)

将Javascript对象传递给HTML iframe(作为对象),javascript,html,iframe,scope,arguments,Javascript,Html,Iframe,Scope,Arguments,主窗口创建一个JavaScript对象,子窗口需要利用该对象 我的MainWindow.html目前看起来像这样 <html> <body> <script> var varObject = {type:"Error", message:"Lots"}; </script> <iframe class="child" src="ChildWindow.html"></iframe>

主窗口创建一个JavaScript对象,子窗口需要利用该对象

我的MainWindow.html目前看起来像这样

<html>
  <body>
    <script>
      var varObject = {type:"Error", message:"Lots"};
    </script>
    <iframe class="child" src="ChildWindow.html"></iframe>
  </body>
</html>

var varObject={type:“Error”,消息:“Lots”};
ChildWindow.html如下所示

<html>
  <body>
    <script>
      console.log(varObject.type); // goal is to log "Error"
    </script>
  </body>
</html>

console.log(varObject.type);//目标是记录“错误”
ChildWindow正在尝试使用在主窗口中创建的对象,当然它不能,因为我还不知道如何传递它


我已经尝试用谷歌搜索过了,但我发现的大多数解决方案都涉及将值作为字符串而不是变量传递。

您应该使用它向嵌入站点的iframe发送消息。

只需将对象分配到iframe的
窗口即可传递对象

在父窗口中:

在iframe'ed窗口中

console.log(感兴趣的window.object);

请查看以下代码:

<html>
  <body>
    <script>
      var varObject = {type:"Error", message:"Lots"};
      var child = document.getElementsByClassName("child")[0];
      var childWindow = child.contentWindow;
      childWindow.postMessage(JSON.stringify(varObject),*);
    </script>
    <iframe class="child" src="ChildWindow.html"></iframe>
  </body>
</html>

var varObject={type:“Error”,消息:“Lots”};
var child=document.getElementsByClassName(“child”)[0];
var childWindow=child.contentWindow;
postMessage(JSON.stringify(varObject),*);
在ChildWindow.html中

<html>
  <body>
    <script>
      function getData(e){
        let data = JSON.parse(e.data);
        console.log(data);
      }
      if(window.addEventListener){
        window.addEventListener("message", getData, false);
      } else {
        window.attachEvent("onmessage", getData);
      }
    </script>
  </body>
</html>

函数getData(e){
让data=JSON.parse(e.data);
控制台日志(数据);
}
if(window.addEventListener){
addEventListener(“消息”,getData,false);
}否则{
attachEvent(“onmessage”,getData);
}

希望有帮助:)

不一定是消息,有时是数据库连接对象。您可以使用
JSON.stringify(obj)
将对象转换为字符串和
JSON.parse(str)
再次转换它们。如果对象是承诺、函数或任何其他更复杂的对象结构,则此操作不起作用。必须是contentWindow而不是contextWindow?使用contentWindow对我有效,正如@abdolence所建议的。安全性错误:拒绝访问跨源上的属性“感兴趣的对象”object@Oram-该iframe中的“网站”必须允许跨来源访问(或具有相同来源),以便您修改其数据。如果浏览器允许用户打开其他网站并修改这些网站中的数据而没有任何限制,则可能存在许多安全风险。我添加了此评论,因为您不能“简单地传递对象”“。如你在答复中所述,你有一些限制。
<html>
  <body>
    <script>
      function getData(e){
        let data = JSON.parse(e.data);
        console.log(data);
      }
      if(window.addEventListener){
        window.addEventListener("message", getData, false);
      } else {
        window.attachEvent("onmessage", getData);
      }
    </script>
  </body>
</html>