`
driftcloudy
  • 浏览: 132219 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【翻译】window.name Transport(1)

阅读更多

        下午写代码的时候遇到一个跨域传输的问题,隔壁dojo组的帅哥建议我用dojox.io.windowName,于是我打算找点资料看看,结果搜了下发现几乎没有相关资料,连dojoCampus 上都没有详细解释。没办法,dojo的文档确实不多。我只好找篇英文的凑活看看了。

原文链接:http://www.sitepen.com/blog/2008/07/22/windowname-transport/

 

译:

      window.name传输是一种可以进行跨域浏览器数据交互的新技术,同时它还能够同未知来源建立起安全的混搭 。dojo将window.name实现在了dojox.io.windowName 模块中,利用 window.name机制,我们将很容易建立起web服务 windows.name是通过在iframe中载入一个跨域的HTML文件来工作的。随后,HTML文件将窗体的window.name属性设置为返回的响应数据。请求方可以取得window.name的值来获取响应数据,而被请求的资源从来没能够访问过请求者的执行环境(比如js变量,DOM树,cookie)。

Dojo API

为了使用window.name传输,你可以使用dojox.io.windowName 中唯一一个函数:send,它有着与 dojo.xhr 非常类似的接口。

dojox.io.windowName.send(method, args);

 

其中,参数method可以是GET或者POST。参数args是一个对象,该对象包含了目标URL以及其他所有Dojo ioArgs API 的信息。当你调用dojox.io.windowName.send 时,它会发送指定的请求,然后返回一个dojo.Deferred 对象,用以监听最后的响应。例如:

var deferred = dojox.io.windowName.send
(
	"GET", 
	{ url:"http://somesite.com/resource" }
);
deferred.addCallback(
	function(result){
  		alert("The request returned " + result);
	}
);

Making Web Services Available with window.name

为了用window.name实现web服务,服务器应该仅仅寻找那些包含一个windowname 参数的请求。如果请求中包含了windowname 参数,服务器需要构造一个HTML文本,并且将window.name设置成返回给客户端的内容。举例来说,一个客户端发送如下的请求:

request:
http://othersite.com/greeting?windowname=true

 

假设服务器端的响应为“Hello”,那么它应该返回给客户端一个HTML页面:

<html>
        <script type="text/javascript">
                window.name="Hello";
        </script>
</html>

 

这样,客户端接收到的值就是“Hello”.同样,我们可以轻松的解析JSON格式的数据:

<html>
         <script type="text/javascript">
                window.name=’{"foo":"bar"}’;
         </script>
</html>

 

客户端会接收到这段代表JSON的字符串‘{"foo":"bar"}’,利用类似dojo.fromJson 之类的JSON解释器,这种字符串很容易被翻译为JSON对象。我们强烈建议你在编写客户端的时候采用JSON或者更加安全的JS验证器,如果你不想让那些糟糕的代码肆无忌惮的访问web服务的数据。为了更加安全的解析JSON,你可以在调用dojo.fromJson 之前先用dojox.secure.capability 对JSON进行测试:

var deferred = dojox.io.windowName.send("GET", {url:"http://somesite.com/resource"});

deferred.addCallback(function(result){
       // capability.validate will throw an error
       // if there is unsafe script code in the JSON
       dojox.secure.capability.validate(result,[],{});
       console.log("received object", dojo.fromJson(result));
});

 

在字符串中手动编写那种很大的JSON对象可能很麻烦,并且容易出错。你可以使用HTML模板来解决这个问题。HTML模板使得编写JSON数据更轻松,并且会被当成一个JSON字符串来传输,而不需要你手动去分解出JSON对象。

<html>
<script type="\’text/javascript\’">
      window.name = document.getElementsByTagName("script")[0]
                                .innerHTML.match(/temp\s*=([\w\W]*)/)[1];
      temp= {foo:"bar", baz:"foo"}// put json data here
</script>
</html>
 

同样,如果你想要传输一份HTML或者XML数据而又不想将他们都写到一个字符串中,这边有一份模板:

<html>
<body>
        <p id="content">
              some <strong>html/xml-style</strong>data
        </p>
</body>
<script type="\’text/javascript\’">
        window.name = document.getElementById("content").innerHTML;
</script>
</html>
 

这个模板已经在FF2,FF3,Safari3,IE6,IE7,Opera9下被测试过了。你可以看一个使用了window.name机制的简单demo页面 。默认情况下,这个例子会从我们的Persevere 服务器加加载数据。

 

分享到:
评论

相关推荐

    计算机网络_第四版(andrew S. Tanenbaum)

    Chapter 1. Introduction Section 1.1. Uses of Computer Networks Section 1.2. Network Hardware Section 1.3. Network Software Section 1.4. Reference Models Section 1.5. Example Networks ...

    计算机网络(第四版)(英文版+答案)

    Chapter 1. Introduction Section 1.1. Uses of Computer Networks Section 1.2. Network Hardware Section 1.3. Network Software Section 1.4. Reference Models Section 1.5. Example Networks ...

    《计算机网络(第四版)》【英文原版exe电子书】【Andrew S. Tanenbaum】Computer Networks(Fourth Edition )

    Chapter 1. Introduction Section 1.1. Uses of Computer Networks Section 1.2. Network Hardware Section 1.3. Network Software Section 1.4. Reference Models Section 1.5. Example Networks ...

    计算机网络英文版(第四版)

    Chapter 1. Introduction Section 1.1. Uses of Computer Networks Section 1.2. Network Hardware Section 1.3. Network Software Section 1.4. Reference Models Section 1.5. Example Networks Section 1.6...

    计算机网络第四版(英文原版)

    Chapter 1. Introduction Section 1.1. Uses of Computer Networks Section 1.2. Network Hardware Section 1.3. Network Software Section 1.4. Reference Models Section 1.5. Example Networks ...

    计算机网络 英文原版版(第四版)

    Chapter 1. Introduction Section 1.1. Uses of Computer Networks Section 1.2. Network Hardware Section 1.3. Network Software Section 1.4. Reference Models Section 1.5. Example Networks Section 1.6...

    网络教程多所重点大学指定教材电子版

    Chapter 1. Introduction Section 1.1. Uses of Computer Networks Section 1.2. Network Hardware Section 1.3. Network Software Section 1.4. Reference Models Section 1.5. Example Networks ...

    python3.6.5参考手册 chm

    PEP 3155: Qualified name for classes and functions PEP 412: Key-Sharing Dictionary PEP 362: Function Signature Object PEP 421: Adding sys.implementation SimpleNamespace Using importlib as the ...

    js的日历时间控件

    new Ajax.Request(base+"locales/"+locale+".js",{onSuccess:function(transport){eval(transport.responseText);this.setLocale(new Control.DatePicker.i18n(locale))}.bind(this),onFailure:function(transport){...

    Java邮件开发Fundamentals of the JavaMail API

    find support for NNTP (Network News Transport Protocol) [newsgroups], S/MIME (Secure Multipurpose Internet Mail Extensions), and more. Fundamentals of the JavaMail API Page 5 Presented by ...

    WKWebView与JS交互详解

    当JavaScript通过`window.webkit.messageHandlers.messageHandler.postMessage()`发送消息时,`userContentController(_:didReceive:)`方法会被调用。 总的来说,WKWebView提供了丰富的API和机制,使得开发者能够...

    计算机网络第六版答案

    as modern routers sometimes act as firewalls or caching components, and process Transport layer as well.) Link layer switches process link and physical layers (layers 1 through2). Hosts process all ...

    MidtermExam_吴先_13000128171

    Question 1.5 introduces the concept of authoritative name servers in the Domain Name System (DNS). These servers are responsible for providing authoritative responses to DNS queries for a specific ...

    axis cxf 创建webservice

    &lt;servlet-class&gt;org.apache.cxf.transport.servlet.CXFServlet &lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt; &lt;url-pattern&gt;/services/* ``` **步骤4**: 创建服务接口和实现类 - 创建一个接口,例如`...

    linux和windows安装nginx-1.11.10教程和对应的文件

    主要关注的是`server_name`(你的主机名或IP地址)和`root`(网站内容的根目录)。 4. **启动Nginx** 在命令行中,导航到Nginx的安装目录,然后运行`nginx.exe`。或者,你可以创建一个快捷方式并以管理员身份运行...

    2012年2010级软件学院计算机网络试卷B卷(回忆版)1

    6. If window size is equal 1, SR is the same as GBN 答:正确,如果窗口大小为 1,SR 与 GBN 相同。 7. TCP 到达接收方,用 port 和 IP 去 Demultiplexing。 答:正确,TCP 到达接收方,使用端口号和 IP 地址...

Global site tag (gtag.js) - Google Analytics