My Silverlight系列(4)——恼人的Silverlight文件操作
2008-07-26 12:20
218 查看
近日,我所做的Silverlight项目有这么一个需求:点击一个控件,就像在HTML上点击一个超链接一样,由浏览器提示下载某一个文件,当然文件的Uri是已知,是通过这次点击触发的事件处理程序计算得到的。
为了实现这个目的,我试验了很多的方法,由于Silverlight只支持隔离存储区,而且它没有类似于超链接的控件,因此我必须求助于js和asp.net。在我转载的一篇文章里,那种手段的确让人眼前一亮,但是试验的结果却令我很不满意。在这里我模拟一下那种实现方法,并且给出结果。
Silverlight cs文件中代码如下:
private void Button_Click(object sender, RoutedEventArgs e)
div style="margin-bottom:100px">
<a id="download" href="" target="_blank" style=" margin-right:58px">Download a File</a>
<a id="open" href="" target="_blank" style=" margin-right:65px">Open a Site</a>
<input id="button" type="button" value="Download" onclick="return Button_onclick()" />
</div>
aspx中js代码如下:
<script language="javascript" type="text/javascript">
</script>
解释一下这些代码的作用:首先,在sliverlight的xaml文件中我定义了一个button,它的事件处理代码如第一段所示,然后我在aspx页面中加入了一个div并加入了三个元素用于对比。运行效果如图所示:
function silverlightbutton_onclick() function Button_onclick() {
window.open("http://files.cnblogs.com/wodehuajianrui/BubblyStyleProject.zip", "_self");
}
运行结果如下:
![](http://images.cnblogs.com/cnblogs_com/wodehuajianrui/silverlight0004.jpg)
并没有被浏览器拦截,而是正常提示下载。由此可见,sliverlight出于安全因素的考虑,极大地限制了它的行为。同时,这是我调用js的结果,如果我调用dom,让aspx页面向我的浏览器post一个文件,也会被拦截……本来我们用sliverlight是为了提高用户体验,但是这样页面频繁的刷新,而且还总跳出提示,让人非常的不爽。。。
我想投机取巧的方法也不是没有,微软在他的MSN space中的SkyDrive中,做了一些手脚,他的是一个aspx页,但是如果是通过Server主动将文件post过来的话,一定会被浏览器拦截的,所以微软的工程师想了一个办法,他们巧妙的应用CSS,将一个链接打扮得像一个button,连on:focus伪类都用上了,然后动态的利用js为链接的href赋值,从而当用户点击那个长得像button的链接的时候,就会直接下载文件(因为这是用户自己的get请求,所以浏览器不会拦截)。所以在silverlight上我们完全也可以使用类似的办法欺骗用户。。。。
说到这,我希望微软在开发下一个版本的silverlight时,考虑将这些限制解除,这样那样的限制实在太讨厌了,silverlight既然可以通过js来做一些事,我们何不让它就在托管的.net代码中做那些事呢?衷心希望能在方便和安全中间,找到一个万全之策!
为了实现这个目的,我试验了很多的方法,由于Silverlight只支持隔离存储区,而且它没有类似于超链接的控件,因此我必须求助于js和asp.net。在我转载的一篇文章里,那种手段的确让人眼前一亮,但是试验的结果却令我很不满意。在这里我模拟一下那种实现方法,并且给出结果。
Silverlight cs文件中代码如下:
private void Button_Click(object sender, RoutedEventArgs e)
div style="margin-bottom:100px">
<a id="download" href="" target="_blank" style=" margin-right:58px">Download a File</a>
<a id="open" href="" target="_blank" style=" margin-right:65px">Open a Site</a>
<input id="button" type="button" value="Download" onclick="return Button_onclick()" />
</div>
aspx中js代码如下:
<script language="javascript" type="text/javascript">
</script>
解释一下这些代码的作用:首先,在sliverlight的xaml文件中我定义了一个button,它的事件处理代码如第一段所示,然后我在aspx页面中加入了一个div并加入了三个元素用于对比。运行效果如图所示:
function silverlightbutton_onclick() function Button_onclick() {
window.open("http://files.cnblogs.com/wodehuajianrui/BubblyStyleProject.zip", "_self");
}
运行结果如下:
![](http://images.cnblogs.com/cnblogs_com/wodehuajianrui/silverlight0004.jpg)
并没有被浏览器拦截,而是正常提示下载。由此可见,sliverlight出于安全因素的考虑,极大地限制了它的行为。同时,这是我调用js的结果,如果我调用dom,让aspx页面向我的浏览器post一个文件,也会被拦截……本来我们用sliverlight是为了提高用户体验,但是这样页面频繁的刷新,而且还总跳出提示,让人非常的不爽。。。
我想投机取巧的方法也不是没有,微软在他的MSN space中的SkyDrive中,做了一些手脚,他的是一个aspx页,但是如果是通过Server主动将文件post过来的话,一定会被浏览器拦截的,所以微软的工程师想了一个办法,他们巧妙的应用CSS,将一个链接打扮得像一个button,连on:focus伪类都用上了,然后动态的利用js为链接的href赋值,从而当用户点击那个长得像button的链接的时候,就会直接下载文件(因为这是用户自己的get请求,所以浏览器不会拦截)。所以在silverlight上我们完全也可以使用类似的办法欺骗用户。。。。
说到这,我希望微软在开发下一个版本的silverlight时,考虑将这些限制解除,这样那样的限制实在太讨厌了,silverlight既然可以通过js来做一些事,我们何不让它就在托管的.net代码中做那些事呢?衷心希望能在方便和安全中间,找到一个万全之策!
相关文章推荐
- XML 处理 ,包括文件读写, in silverlight (silverlight系列(XML操作、HTTP通信、WebRequest通信))
- My Silverlight系列(3)——SilverLight的剪切板操作
- javase重新开始系列之文件操作与I/O流
- JavaSE系列第一篇——文件操作工具类FileUtil
- Windows 8实用窍门系列:13.windows 8的文件.文件夹管理---2.文件以及文件夹操作
- 关于在WIN32调用一些Zw系列的文件操作函数
- Html5 学习系列(四)文件操作API
- Silverlight中文件的生成操作与其对应的获取方法
- Windows phone开发之文件夹与文件操作系列(一)文件夹与文件操作
- java知识系列之操作js文件
- PHP学习系列之文件访问及文件操作
- 串口通讯系列二之文件读写操作
- C#探秘系列(七):XML文件操作(一)
- Python学习系列(五)(文件操作及其字典)
- Hadoop系列-HDFS文件操作的JAVA API用法(七)
- Silverlight实用窍门系列:51.Silverlight页面控件的放大缩小、Silverlight和Html控件的互相操作【附带源码实例】
- Silverlight编译错误,提示某文件不是项目的一部分或"生成操作"没有设置为"资源"
- 系列4:文件操作以及读写文件
- 关于在WIN32调用一些Zw系列的文件操作函数
- Silverlight实用窍门系列:42.读取拖动到控件上的外部txt和jpg文件,多外部文件的拖动