js 在浏览器中的限制

  众所周知,由于安全方面的考虑,运行在浏览器中的JS脚本会被存在很多限制,这里做一下小小的归纳:

    1.JS不允许访问宿主的计算机:

js原本是不能读取或写入用户计算机的文件系统的(cookie除外),但是HTML5新增的file API,能让我们能突破这个限制(但是仍然有其他限制条件,有兴趣的同学可以参考http://www.html5rocks.com/zh/tutorials/file/filesystem/)。

    2.同源策略:

      这个大家应该都知道,就是两个页面的域必须相同,才允许相互通信。

    3.js不能读取历史对象的属性,即使你可以让用户在浏览历史中后退,但是不能知道他们退回到了哪个页面。

    4.js不能设置文件上传表单域的值,即如果你要为<input type="file" name="file">的域设置value值的话,浏览器会报错。

    5.如果js试图关闭由用户打开的窗口,用户会被询问是否允许该操作,但是由js打开的窗口没有此限制。

    6.浏览器不允许打开一个小于100*100的窗口,或者位置在可视范围外的窗口。

时间: 2024-10-26 01:02:33

js 在浏览器中的限制的相关文章

JS 检测浏览器中是否安装了特定的插件

1.检测非IE浏览器 可以使用plugins数组来达到这个目的,例: 1 //检测插件(在IE中无效) 2 function hasPlugin(name){ 3 name = name.toLowerCase(); 4 for(var i=0;i<navigator.plugins.length;i++) 5 { 6 if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1) 7 { 8 return true; 9 } 10 }

用JS在浏览器中创建下载文件如下可以做到

前端很多项目中,都有文件下载的需求,特别是JS生成文件内容,然后让浏览器执行下载操作(例如在线图片编辑.在线代码编辑.iPresst等 但受限于浏览器,很多情况下我们都只能给出个链接,让用户点击打开->另存为.如下面这个链接: <a href="file.js">file.js</a> 用户点击这个链接的时候,浏览器会打开并显示链接指向的文件内容,显然,这并没有实现我们的需求.HTML5中给a标签增加了一个download属性,只要有这个属性,点击这个链接

js检测浏览器中是否安装了flash播放插件

这两天工作中需要在网页中嵌入flash小游戏,我使用的是swfobject.js version:1.5.其他方面都很好,唯独版本检测这里一直没有搞通,后来实在无奈之下,改用js来检测浏览器的flash插件情况,代码如下: <script> function flashChecker() { var hasFlash = 0; //是否安装了flash var flashVersion = 0; //flash版本 if (document.all) { var swf = new Activ

用JS在浏览器中创建下载文件

前端很多项目中,都有文件下载的需求,特别是JS生成文件内容,然后让浏览器执行下载操作(例如在线图片编辑.在线代码编辑.iPresst等 但受限于浏览器,很多情况下我们都只能给出个链接,让用户点击打开->另存为.如下面这个链接: <a href=”file.js”>file.js</a> 用户点击这个链接的时候,浏览器会打开并显示链接指向的文件内容,显然,这并没有实现我们的需求.HTML5中给a标签增加了一个download属性,只要有这个属性,点击这个链接时浏览器就不在打开链

JS获取浏览器中的各种宽高值

width: clientWidth:对象实际内容的宽度,不包含边线,最大不超过视口宽度 offsetWidth:对象实际宽度,包含边线,最大不超过视口宽度 scrollWidth:对象实际宽度,不包含边线,可超过视口宽度 height:(都可超过视口高度) clientHeight:对象实际内容的高度,不包含边线 offsetHeight:对象实际高度,包含边线 scrollHeight:对象实际高度,不包含边线.如果对象为body,大于视口时为实际高度,小于视口时为视口高度 分辨率宽高: w

js下载浏览器中的图片

jquery function download(src) { var $a = $("<a></a>").attr("href", src).attr("download", "img.png"); $a[0].click(); } 原生javascript function download(src) { var $a = document.createElement('a'); $a.setAtt

js单线程&amp;浏览器多线程

copy大牛的好文:from http://www.cnblogs.com/Mainz/p/3552717.html 只是做个记录,方便以后查看. 面试的时候发现99%的童鞋不理解为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的?还有non-blocking IO, event loop等概念很不清楚.来深入分析一下: 首先看下面的代码: 1 2 3 4 5 6 7 8 9 function foo() {     console

用postal.js在AngularJS中实现订阅发布消息

用postal.js在AngularJS中实现event bus 用postal.js在AngularJS中实现event bus 理想状态下,在一个AngularJS应用中,控制器都应该是相互独立的代码单元,它们之间不应该有任何的相互引用.但是有些时候,你还是需要让控制器在你的应用中相互交流.例如你现在有一个叫做Orders的控制器,它需要告诉一个叫做Cart的控制器其中需要添加一个新项目. 实现这种类型的交流方式的最好的方法之一就是使用event bus. postal.js正是一个在JS中

解决webkit浏览器中js方法中使用window.event提示未定义的问题

这实际上是一个浏览器兼容性问题,根源百度中一大堆,简要说就是ie中event对象是全局变量,所以哪里都能使用到,但是webkit内核的浏览器中却不存在这个全局变量event,而是以一个隐式的局部变量的形式传入(后文会详说). function myfunc(param){ alert(window.event); } //ie中 <input type="button" onclick="myfunc('testie')" > //一切正常 //webk