• 关于

    ie浏览器不支持本地存储

    的搜索结果

回答

Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。 除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。 但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生 浏览器的支持除了IE7及以下不支持外,其他标准浏览器都完全支持(ie及FF需在web服务器里运行),值得一提的是IE总是办好事,例如IE7、IE6中的UserData其实就是javascript本地存储的解决方案。通过简单的代码封装可以统一到所有的浏览器都支持web storage。 localStorage和sessionStorage都具有相同的操作方法,例如setItem、getItem和removeItem等
小柯卡力多 2019-12-02 03:21:52 0 浏览量 回答数 0

回答

新特性: HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。 1. 拖拽释放(Drag and drop) API 2. 语义化更好的内容标签(header,nav,footer,aside,article,section) 3. 音频、视频API(audio,video) 4. 画布(Canvas) API 5. 地理(Geolocation) API 6. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失; 7. sessionStorage 的数据在浏览器关闭后自动删除 8. 表单控件,calendar、date、time、email、url、search 9. 新的技术webworker, websocket, Geolocation 移除的元素: 1. 纯表现的元素:basefont,big,center,font, s,strike,tt,u; 2. 对可用性产生负面影响的元素:frame,frameset,noframes; 支持HTML5新标签: 1. IE8/IE7/IE6支持通过 document.createElement 方法产生的标签,可以利用这一特性让这些浏览器支持 HTML5 新标签,浏览器支持新标签后,还需要添加标签默认的样式(当然最好的方式是直接使用成熟的框架、使用最多的是html5shiv框架): 如何区分: DOCTYPE声明新增的结构元素、功能元素
小柯卡力多 2019-12-02 03:21:59 0 浏览量 回答数 0

回答

新特性: 拖拽释放(拖放)API 语义化更好的内容标签(页眉,导航,页脚,旁边,文章,部分) 音频,视频API(音频,视频) 画布(画布)API 地理(地理位置)API 本地离线存储localStorage长期存储数据,浏览器关闭后数据不丢失; sessionStorage的数据在浏览器关闭后自动删除 表单控件,日历,日期,时间,电子邮件,网址,搜索 新的技术webworker,websocket,地理位置 可移除的元素: 纯表现的元素:basefont,大,center,font,s,strike,tt,u; 对可用产生可能影响的元素:frame,frameset,noframes; 支持HTML5新标签: IE8 / IE7 / IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签,浏览器支持新标签后,还需要添加标签样式的样式: 当然最好的方式是直接使用成熟的框架,使用最多的是html5shim框架 <!- [如果是IE 9,则>> 脚本> src =“ http://html5shim.googlecode.com/svn/trunk/html5.js”; </ script> <![endif] ->
茶什i 2019-12-02 03:16:12 0 浏览量 回答数 0

阿里云爆款特惠专场,精选爆款产品低至0.95折!

爆款ECS云服务器8.1元/月起,云数据库低至1.5折,限时抢购!

回答

使用JavaScript 1.6 / ECMAScript 5,您可以通过filter以下方式使用Array 的本机方法来获取具有唯一值的数组: function onlyUnique(value, index, self) { return self.indexOf(value) === index; } // usage example: var a = ['a', 1, 'a', 2, '1']; var unique = a.filter( onlyUnique ); // returns ['a', 1, 2, '1'] 本机方法filter将遍历数组,仅保留那些通过给定回调函数的条目onlyUnique。 onlyUnique检查给定值是否是第一个出现。如果不是,它必须是重复的,并且不会被复制。 此解决方案无需任何额外的库(如jQuery或prototype.js)即可工作。 它也适用于具有混合值类型的数组。 对于旧版浏览器(<ie9),它们不支持本机方法filter,indexOf您可以在MDN文档中找到关于filter和indexOf的解决方法。 如果要保留最后一次出现的值,请简单地替换indexOf为lastIndexOf。 使用ES6可以简化为: // usage example: var myArray = ['a', 1, 'a', 2, '1']; var unique = myArray.filter((v, i, a) => a.indexOf(v) === i); // unique is ['a', 1, 2, '1'] 感谢Camilo Martin的评论提示。 ES6有一个本地对象Set来存储唯一值。要获得具有唯一值的数组,您现在可以执行以下操作: var myArray = ['a', 1, 'a', 2, '1']; let unique = [...new Set(myArray)]; // unique is ['a', 1, 2, '1'] 的构造函数Set采用一个可迭代的对象(例如Array),并且散布运算符...将集合转换回Array。 问题来源于stack overflow
保持可爱mmm 2020-01-08 17:17:34 0 浏览量 回答数 0

问题

【云服务器分享】如何节省网站流量

                                                                       本文章摘自专家博客 现在做网站,最贵的成本是什么?当然是网络流量。 C...
dreamdoo 2019-12-01 20:29:01 75746 浏览量 回答数 13

回答

本文介绍了如何使用Windows实例搭建FTP站点。此方法适用于Windows Server 2008及以上系统,本文以Windows Server 2012 R2为例。 前提条件 使用本教程进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册。 已创建ECS实例,本教程中使用的资源信息如下。 实例规格:ecs.c6.large 操作系统:Windows Server 2012 R2 64位 操作步骤 Windows 实例搭建FTP站点的具体操作步骤如下: 步骤一:添加IIS以及FTP服务角色 步骤二:创建FTP用户名及密码 步骤三:设置共享文件的权限 步骤四:添加及设置FTP站点 步骤五:设置安全组及防火墙 步骤六:客户端测试 步骤一:添加IIS以及FTP服务角色 在创建FTP站点前,首先需要安装IIS及FTP服务。 远程连接Windows实例。具体操作,请参见在本地客户端上连接Windows实例。 在底部任务栏,单击服务器管理器图标。 ftp0 在顶部导航栏,单击管理 > 添加角色和功能。 ftp1 在弹出的对话框中,默认单击下一步到选择服务器角色界面。 选中Web 服务器(IIS),在弹出的对话框中单击添加功能,然后单击下一步。 ftp2 在选择角色服务界面。选中IIS管理控制台以及FTP 服务器,单击下一步。 ftp3 单击安装。 步骤二:创建FTP用户名及密码 完成以下操作,创建Windows用户名和密码,用于FTP使用。如果您希望匿名用户可以访问,可省略此步骤。 在底部任务栏,单击开始图标。 单击管理工具,然后双击计算机管理。 在左侧导航栏单击本地用户和组 > 用户。 ftp4 在中间空白处单击鼠标右键,并选择新用户。 本示例中用户名使用ftptest。 说明 密码必须包括大写字母、小写字母和数字。否则会显示无法通过密码策略。 ftp5 步骤三:设置共享文件的权限 您需要为在FTP站点共享给用户的文件夹设置访问和修改等权限。 在服务器磁盘上创建一个供FTP使用的文件夹。右键单击文件夹,选择属性。 本示例中,在C盘下创建一个名为ftp的文件夹。 单击安全页签,然后单击编辑。 单击添加。 在弹出的对话框中,输入对象名称Everyone,然后单击确定。 在组或用户名区域,单击刚刚添加的Everyone,然后根据需要,选择Everyone的权限,并单击确定。 本示例中允许所有权限。ftp8 步骤四:添加及设置FTP站点 安装FTP,设置好共享文件夹权限后,您需要创建FTP站点。 在底部任务栏,单击服务器管理器图标。 在顶部导航栏,单击工具 > Internet Information Services(IIS)管理器。 ftp8 在左侧导航栏右键单击网站,并单击添加FTP站点...。 ftp9 在弹出的对话框中,填写FTP站点名称与共享文件夹的物理路径,然后单击下一步。 本示例中FTP 站点名称设置为ftptest,物理路径请选择在步骤三:设置共享文件的权限中创建的FTP文件夹路径。10 IP 地址默认选择全部未分配。端口号可自行设置,FTP默认端口号为21。 选择SSL设置,然后单击下一步。 允许:允许FTP服务器支持与客户端的非SSL和SSL连接。 需要:需要对FTP服务器和客户端之间的通信进行SSL加密。 无: 不需要SSL加密。 ftp11 选择要使用的一种或多种身份验证方法。 匿名:允许任何仅提供用户名anonymous或ftp的用户访问内容。 基本:需要用户提供有效用户名和密码才能访问内容。由于基本身份验证通过网络传输未加密的密码,因此请仅在清楚客户端和FTP服务器之间的连接是安全的情况下(例如,使用安全套接字层SSL时)使用此身份验证方法。 从允许访问列表中,选择以下选项之一: 所有用户:所有用户(不论是匿名用户还是已标识的用户)均可访问相应内容。 匿名用户:匿名用户可访问相应内容。 指定角色或用户组:仅特定角色或用户组的成员才能访问相应内容。请在对应的文本框中输入角色或用户组。 指定用户:仅指定用户才能访问相应内容。请在对应的文本框中输入用户名。 选中经过授权的用户的读取和写入权限。然后单击完成。 12 完成后可以看到搭建的FTP站点。13 步骤五:设置安全组及防火墙 搭建好FTP站点后,您需要在实例安全组的入方向添加一条放行FTP端口的安全组规则,具体步骤请参见添加安全组规则,具体配置请参见安全组应用案例和典型应用的常用端口。 服务器防火墙默认放行TCP 21端口用于FTP服务。如果选用其他端口,您需要在防火墙中添加一条放行此端口的入站规则。 具体操作,请参见设置 ECS 实例远程连接防火墙。 其他防火墙设置请参见微软官方文档。 步骤六:客户端测试 完成以下步骤,在客户端上测试: 设置IE浏览器。 打开IE浏览器,单击设置 > Internet选项。 单击高级页签。在设置区域,选中启用 FTP 文件夹视图复选框,清除使用被动 FTP复选框。 打开客户端的计算机,在路径栏中输入ftp://服务器 IP 地址:FTP 端口(如果不填端口则默认访问21端口),例如:ftp://0.0.0.0:21。 16 如果弹出输入用户名和密码的对话框表示配置成功,输入正确的用户名和密码后,即可对FTP文件进行相应权限的操作。本示例中,请输入步骤二:创建FTP用户名及密码中创建的FTP用户名(ftptest)和对应的密码。13 后续步骤 您可以对 FTP 服务进行安全加固。详情请参见安全加固方案。 如果您想基于FTP协议来管理存储在OSS上的文件,您可以安装OSS FTP。具体操作,请参见安装OSS FTP。OSS FTP接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作。
1934890530796658 2020-03-26 10:00:13 0 浏览量 回答数 0

回答

JavaScript具有强大的语义,可以遍历数组和类似数组的对象。我将答案分为两部分:真正数组的选项,以及仅是数组之类的东西的选项,例如arguments对象,其他可迭代对象(ES2015 +),DOM集合,等等。 我会很快注意到,您现在可以通过将ES2015转换为ES5 ,甚至在ES5引擎上使用ES2015选项。搜索“ ES2015 transpiling” /“ ES6 transpiling”以了解更多... 好吧,让我们看看我们的选择: 对于实际数组 您目前在ECMAScript 5(“ ES5”)中拥有三个选项,这是目前最广泛支持的版本,在ECMAScript 2015中又添加了两个选项(“ ES2015”,“ ES6”): 使用forEach及相关(ES5 +) 使用一个简单的for循环 正确使用for-in 使用for-of(隐式使用迭代器)(ES2015 +) 明确使用迭代器(ES2015 +) 细节: 1.使用forEach及相关 在任何可以访问ArrayES5(直接或使用polyfills)添加的功能的模糊现代环境(因此,不是IE8)中,都可以使用forEach(spec| MDN): var a = ["a", "b", "c"]; a.forEach(function(entry) { console.log(entry); }); forEach接受回调函数,以及(可选)this调用该回调时要使用的值(上面未使用)。依次为数组中的每个条目调用回调,从而跳过稀疏数组中不存在的条目。尽管上面只使用了一个参数,但回调函数使用以下三个参数调用:每个条目的值,该条目的索引以及对要迭代的数组的引用(以防您的函数尚未使用它) )。 除非您支持IE8之类的过时浏览器(截至2016年9月,NetApps在该市场上所占份额刚刚超过4%),forEach否则您可以在没有垫片的情况下在通用网页中愉快地使用。如果您确实需要支持过时的浏览器,forEach则可以轻松进行填充/填充(搜索“ es5 shim”以获得多个选项)。 forEach 这样做的好处是您不必在包含范围中声明索引和值变量,因为它们是作为迭代函数的参数提供的,因此可以很好地将作用域限定为该迭代。 如果您担心为每个数组条目进行函数调用的运行时成本,请不必担心;细节。 此外,forEach它是“遍历所有对象”功能,但是ES5定义了其他几个有用的“遍历数组并做事”功能,包括: every(在第一次返回回调false或出现错误时停止循环) some(在第一次返回回调true或发生错误时停止循环) filter(创建一个新数组,其中包含过滤器函数返回的元素,true并省略其返回的元素false) map (根据回调返回的值创建一个新数组) reduce (通过重复调用回调并传入先前的值来建立值;有关详细信息,请参见规范;对汇总数组内容和许多其他内容很有用) reduceRight(如reduce,但按降序而不是升序工作) 2.使用一个简单的for循环 有时,旧方法是最好的: var index; var a = ["a", "b", "c"]; for (index = 0; index < a.length; ++index) { console.log(a[index]); } 如果数组的长度将不会在循环过程中改变,它在性能敏感的代码(不可能),一个稍微复杂一点的版本抓住了长度达阵可能是一个很小的有点快: var index, len; var a = ["a", "b", "c"]; for (index = 0, len = a.length; index < len; ++index) { console.log(a[index]); } 和/或倒数: var index; var a = ["a", "b", "c"]; for (index = a.length - 1; index >= 0; --index) { console.log(a[index]); } 但是,使用现代JavaScript引擎,很少需要消耗掉最后的能量。 在ES2015及更高版本中,可以使索引和值变量在for循环本地: let a = ["a", "b", "c"]; for (let index = 0; index < a.length; ++index) { let value = a[index]; console.log(index, value); } //console.log(index); // would cause "ReferenceError: index is not defined" //console.log(value); // would cause "ReferenceError: value is not defined" 而且,当您执行此操作时,不仅会为每个循环迭代创建一个新的闭包,value而且还会index为每个循环迭代重新创建一个闭包,这意味着在循环主体中创建的闭包保留对为该特定迭代创建的index(和value)的引用: let divs = document.querySelectorAll("div"); for (let index = 0; index < divs.length; ++index) { divs[index].addEventListener('click', e => { console.log("Index is: " + index); }); } 如果您有五个div,则单击第一个将获得“索引为:0”,如果单击最后一个则将为“索引为:4”。如果您使用而不是则无法使用。varlet 3. 正确使用for-in 你会得到别人告诉你使用for-in,但是这不是for-in对。for-in遍历对象的可枚举属性,而不是数组的索引。甚至在ES2015(ES6)中也不保证顺序。ES2015 +不定义为对象属性(通过[[OwnPropertyKeys]],[[Enumerate]]以及使用他们喜欢的东西Object.getOwnPropertyKeys),但它并没有定义for-in将遵循这个顺序。(其他答案的详细信息。) for-in数组上唯一真正的用例是: 这是一个稀疏的数组,里面有巨大的空隙,或者 您正在使用非元素属性,并且希望将它们包括在循环中 仅查看第一个示例:for-in如果使用适当的保护措施,则可以用来访问那些备用阵列元素: // a is a sparse array var key; var a = []; a[0] = "a"; a[10] = "b"; a[10000] = "c"; for (key in a) { if (a.hasOwnProperty(key) && // These checks are /^0$|^[1-9]\d*$/.test(key) && // explained key <= 4294967294 // below ) { console.log(a[key]); } } 请注意以下三个检查: 该对象具有该名称的自身属性(不是从其原型继承的属性),并且 该键是所有十进制数字(例如,正常的字符串形式,而不是科学计数法),并且 该键的值在被强制为数字时为<= 2 ^ 32-2(即4,294,967,294)。这个数字从哪里来?它是规范中数组索引定义的一部分。其他数字(非整数,负数,大于2 ^ 32-2的数字)不是数组索引。它的2 ^ 32的理由- 2是使得大于2 ^ 32下一个最大的索引值- 1,这是一个数组的最大值length可以有。(例如,数组的长度适合于32位无符号整数。)(向RobG表示支持,在我的博客文章的评论中指出我先前的测试不太正确。) 当然,您不会在内联代码中执行此操作。您将编写一个实用程序函数。也许: 4.使用for-of(隐式使用迭代器)(ES2015 +) ES2015将迭代器添加到JavaScript。使用迭代器最简单的方法是new for-of语句。看起来像这样: const a = ["a", "b", "c"]; for (const val of a) { console.log(val); } 在幕后,它从数组中获取一个迭代器并循环遍历,从而从中获取值。这没有使用for-inhas 的问题,因为它使用了由对象(数组)定义的迭代器,并且数组定义了其迭代器遍历其条目(而不是其属性)。与for-inES5 不同,访问条目的顺序是其索引的数字顺序。 5.明确使用迭代器(ES2015 +) 有时,您可能想显式使用迭代器。您也可以这样做,尽管它比笨拙得多for-of。看起来像这样: const a = ["a", "b", "c"]; const it = a.values(); let entry; while (!(entry = it.next()).done) { console.log(entry.value); } 迭代器是与规范中的迭代器定义匹配的对象。每次调用时,其next方法都会返回一个新的结果对象。结果对象具有属性,done告诉我们是否完成操作,以及一个value具有该迭代值的属性。(done如果是false,value则为可选,如果是,则为可选undefined。) 的含义value取决于迭代器;数组至少支持三个返回迭代器的函数: values():这是我上面使用的那个。它返回迭代,其中每个value是用于该迭代阵列条目("a","b",和"c"在实施例更早)。 keys():返回一个迭代器,每个迭代器value都是该迭代的关键(因此,对于我们a上面的代码,将是"0",然后是"1",然后是"2")。 entries():返回一个迭代器,其中每个迭代器value都是[key, value]该迭代形式的数组。 对于类似数组的对象 除了真正的数组之外,还有一些类数组对象,它们具有一个length或多个具有数字名称的属性:NodeList实例,arguments对象等。我们如何遍历它们的内容? 对数组使用上面的任何选项 上面的至少一些(可能是大多数甚至全部)数组方法经常同样适用于类似数组的对象: 使用forEach及相关(ES5 +) 上的各种功能Array.prototype是“有意通用的”,通常可以通过Function#call或在类似数组的对象上使用Function#apply。(在此答案的末尾,请参阅警告,以了解主机提供的对象,但这是一个罕见的问题。) 假设您要forEach在Node的childNodes属性上使用。您可以这样做: Array.prototype.forEach.call(node.childNodes, function(child) { // Do something with `child` }); 如果要执行很多操作,则可能需要将函数引用的副本复制到变量中以供重用,例如: // (This is all presumably in some scoping function) var forEach = Array.prototype.forEach; // Then later... forEach.call(node.childNodes, function(child) { // Do something with `child` }); 使用一个简单的for循环 显然,一个简单的for循环适用于类似数组的对象。 正确使用for-in for-in具有与数组相同的保护措施,也应与类似数组的对象一起使用;上面#1中由主机提供的对象的警告可能适用。 使用for-of(隐式使用迭代器)(ES2015 +) for-of将使用对象提供的迭代器(如果有);我们将不得不看一下它如何与各种类似数组的对象一起运行,尤其是主机提供的对象。例如,NodeListfrom 的规范querySelectorAll已更新以支持迭代。HTMLCollectionfrom 的规格getElementsByTagName不是。 明确使用迭代器(ES2015 +) 参见#4,我们必须看看迭代器如何发挥作用。 创建一个真实的数组 其他时候,您可能希望将类似数组的对象转换为真正的数组。做到这一点非常容易: 使用slice数组的方法 我们可以使用slice数组的方法,就像上面提到的其他方法一样,它是“故意通用的”,因此可以与类似数组的对象一起使用,如下所示: var trueArray = Array.prototype.slice.call(arrayLikeObject); 因此,例如,如果我们要将a NodeList转换为真实数组,则可以执行以下操作: var divs = Array.prototype.slice.call(document.querySelectorAll("div")); 请参阅下面的警告,了解主机提供的对象。特别要注意的是,这将在IE8及更早版本中失败,这不允许您this像这样使用主机提供的对象。 使用传播语法(...) 还可以将ES2015的扩展语法与支持此功能的JavaScript引擎一起使用: var trueArray = [...iterableObject]; 因此,例如,如果我们想将a NodeList转换为真正的数组,使用扩展语法,这将变得非常简洁: var divs = [...document.querySelectorAll("div")]; 使用Array.from (规格) | (MDN) Array.from(ES2015 +,但很容易填充),从类似数组的对象创建数组,可以选择先将条目通过映射函数传递。所以: var divs = Array.from(document.querySelectorAll("div")); 或者,如果您想获取具有给定类的元素的标记名称的数组,则可以使用映射函数: // Arrow function (ES2015): var divs = Array.from(document.querySelectorAll(".some-class"), element => element.tagName); // Standard function (since `Array.from` can be shimmed): var divs = Array.from(document.querySelectorAll(".some-class"), function(element) { return element.tagName; }); 警告主机提供的对象 如果您将Array.prototype函数与主机提供的类似数组的对象一起使用(DOM列表和浏览器而非JavaScript引擎提供的其他内容),则需要确保在目标环境中进行测试,以确保主机提供的对象行为正常。大多数(现在)确实表现正常,但是测试很重要。原因是Array.prototype您可能要使用的大多数方法都依赖于主机提供的对象,该对象为抽象[[HasProperty]]操作提供了诚实的答案。在撰写本文时,浏览器在这方面做得很好,但是5.1规范确实允许由主机提供的对象可能不诚实。在§8.6.2中,该部分开头附近的大表下方的几段中),其中表示: 除非另有说明,否则宿主对象可以以任何方式实现这些内部方法。例如,一种可能性是,[[Get]]和[[Put]]对特定宿主对象确实读取与存储的属性值但[[HasProperty]]总是产生假。 (我在ES2015规范中找不到等效的用法,但情况肯定仍然如此。)同样,在撰写本文时,现代浏览器中的主机提供的类似数组的对象(NodeList例如,实例)确实可以处理[[HasProperty]]正确,但是测试很重要。) 问题来源于stack overflow
保持可爱mmm 2020-01-08 11:20:24 0 浏览量 回答数 0

问题

程序员报错行为大赏-配置报错

Maven本地仓库配置报错:配置报错  GO语言配置什么的都没问题,但就是LiteIDE配置不好。。。:配置报错  Maven 配置nexus仓库 POM文件报错:配置报错  10个你可能从未用过的PHP函数:配置报错  QT...
问问小秘 2020-06-11 13:18:25 6 浏览量 回答数 1

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

阿里极客公益活动:或许你挑灯夜战只为一道难题或许你百思不解只求一个答案或许你绞尽脑汁只因一种未知那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了他们用户自己手中的技术来帮助用户成长本次活动特邀百位阿里技术专家对javascript常...
管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

问题

某政务网站性能优化

门户类网站性能测试分析及调优 1 背景   前段时间,性能测试团队经历了一个规模较大的门户网站的性能优化工作,该网站的开发和合作涉及多个组织和部门,而且网站的重要性不言而喻,同时上...
猫饭先生 2019-12-01 21:25:38 1412 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT