跨域JavaScript通信

跨域JavaScript通信,javascript,jquery,json,Javascript,Jquery,Json,情况是这样的。我的客户将拥有自己的网页。在该页面上,他们可能有一个iFrame,可以在其中显示位于我的服务器上的页面。在iFrame之外,它们会有一些简单的按钮,单击这些按钮时会在iFrame中执行javascript函数 所以基本上,客户域中客户网页的代码应该是这样的 <input type="button" value="Say Hi" id="TestButton"> <iframe src="myserver.com/some_html_page.htm" width=

情况是这样的。我的客户将拥有自己的网页。在该页面上,他们可能有一个iFrame,可以在其中显示位于我的服务器上的页面。在iFrame之外,它们会有一些简单的按钮,单击这些按钮时会在iFrame中执行javascript函数

所以基本上,客户域中客户网页的代码应该是这样的

<input type="button" value="Say Hi" id="TestButton">
<iframe src="myserver.com/some_html_page.htm" width="800" height="550"></iframe>

我做了研究,我知道浏览器的安全性问题,但我想知道有没有办法处理这个问题,可能是使用
json
或其他什么?

处理跨域请求的一种常见模式是使用。

处理跨域请求的一种常见模式,正在使用。

您可以尝试Ben Alman提供的jquery插件,前提是该插件可以在您的服务器和客户端服务器上运行-有关跨域执行js的方法,请参见示例:


您可以尝试Ben Alman提供的这个jquery插件,前提是您可以在自己的服务器和客户端服务器上运行该插件-有关跨域执行js的方法,请参见示例:


让我们考虑如果你有一个名为“代码>测试())/<代码>的函数,它在iFrAME下加载,那么你可以访问下面的<代码>测试()/<代码>函数,如

document.getElementsByName("name of iframe")[0].contentWindow.functionName()
e、 g


让我们考虑如果你有一个名为“代码>测试())/<代码>的函数,它在iFrAME下加载,那么你可以访问<<代码>测试()/<代码>函数,如

document.getElementsByName("name of iframe")[0].contentWindow.functionName()
e、 g

正如您已经知道的(鉴于父级和子级在不同的域中),您肯定无法从子iFrame到达父级来侦听事件

解决这个问题的一种方法是在页面之间传递消息。这将要求您的客户端在其页面以及指向您的服务器的iFrame中包含额外的javascript。本机javascript支持这一点,但包括@Mark Price建议的库将使您的生活更加轻松

下面是一个例子:

客户页面:

...
  <script type="text/javascript" src="jquery.min.js"></script>
  <script type="text/javascript" src="jquery.postMessage.min.js"></script>

  <script type="text/javascript">       
    $(document).ready(function () {
      $("#TestButton").click(function(){
        jQuery.postMessage("say_hi", "myserver.com/some_html_page.htm");
      });
    });
  </script>
</head> 

<input type="button" value="Say Hi" id="TestButton">
<iframe src="myserver.com/some_html_page.htm"></iframe>
。。。
$(文档).ready(函数(){
$(“#测试按钮”)。单击(函数(){
postMessage(“say_hi”,“myserver.com/some_html_page.htm”);
});
});
myserver.com/some_html_page.htm上的代码:

...
  <script type="text/javascript" src="jquery.min.js"></script>
  <script type="text/javascript" src="jquery.postMessage.min.js"></script>

  <script type="text/javascript">
    // you will need to set this dynamically, perhaps by having your
    // clients pass it into the URL of the iFrame,
    // e.g. <iframe src="myserver.com/some_html_page.htm?source_url=..
    var source_origin = "clients_page.com/index.html"; 

    var messageHandler = function (data) {
      // process 'data' to decide what action to take...
      alert("Hi");
    };

    $.receiveMessage(messageHandler, source_origin);
  </script>
</head> 
。。。
//您将需要动态地设置它,可能是通过
//客户端将其传递到iFrame的URL中,
//例如,正如您已经知道的(鉴于父级和子级在不同的域中),您肯定无法从子iFrame到达父级以侦听事件

解决这个问题的一种方法是在页面之间传递消息。这将要求您的客户端在其页面以及指向您的服务器的iFrame中包含额外的javascript。本机javascript支持这一点,但包括@Mark Price建议的库将使您的生活更加轻松

下面是一个例子:

客户页面:

...
  <script type="text/javascript" src="jquery.min.js"></script>
  <script type="text/javascript" src="jquery.postMessage.min.js"></script>

  <script type="text/javascript">       
    $(document).ready(function () {
      $("#TestButton").click(function(){
        jQuery.postMessage("say_hi", "myserver.com/some_html_page.htm");
      });
    });
  </script>
</head> 

<input type="button" value="Say Hi" id="TestButton">
<iframe src="myserver.com/some_html_page.htm"></iframe>
。。。
$(文档).ready(函数(){
$(“#测试按钮”)。单击(函数(){
postMessage(“say_hi”,“myserver.com/some_html_page.htm”);
});
});
myserver.com/some_html_page.htm上的代码:

...
  <script type="text/javascript" src="jquery.min.js"></script>
  <script type="text/javascript" src="jquery.postMessage.min.js"></script>

  <script type="text/javascript">
    // you will need to set this dynamically, perhaps by having your
    // clients pass it into the URL of the iFrame,
    // e.g. <iframe src="myserver.com/some_html_page.htm?source_url=..
    var source_origin = "clients_page.com/index.html"; 

    var messageHandler = function (data) {
      // process 'data' to decide what action to take...
      alert("Hi");
    };

    $.receiveMessage(messageHandler, source_origin);
  </script>
</head> 
。。。
//您将需要动态地设置它,可能是通过
//客户端将其传递到iFrame的URL中,

//问题是在一个框架中启动JavaScript函数,而不是从中获取数据。问题是在一个框架中启动JavaScript函数,而不是从中获取数据。