日常知识记录(更新中)

1. 为什么用element.style 获取样式表的某个属性时获取不到?

element.style返回的是一个cssStyleDeclaration对象,只能操作内嵌样式,对除此以外的样式应用表的属性都会忽略。比如,element.style.background= ‘red’,实际操作后的后果是直接给元素添加了内嵌样式 。由此,引申出下一个问题的思考。

2. 如何获取样式表的属性值

css样式大致分为三种:

  • 内嵌样式:写在tag里面,只对当前tag生效,对其他都无效
  • 内部样式:写在html里面,一般是head中的style里,对当前所在网页有效
  • 外部样式:如果样式表过于复杂,也可能会抽出来写到一个通用的以’.css’后缀结尾的文件中,再引用到页面中来。

基于前面实现可知,element.style只能用来获取和操作内嵌样式,那么考虑非内嵌样式的获取,查阅资料后发现:

  • window.getComputedStyle 可以用来操作非IE的非内嵌样式。

    getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),只读。

  • element.currentStyle 可以用来操作IE的非内嵌样式

综合考虑,如何用js来获取css样式,如果明确样式是非内嵌样式:
(ele.currentStyle?ele.currentStyle:window.getComputedStyle(ele,'伪类(没有写null)')).attr(考虑IE兼容性)

3. 异步请求回调中新开窗口被浏览器视为广告而拦截

这个问题我也参考了网上很多的解决方案,最终比较有效的是,在发生请求前先打开一个空标签,这样,浏览器会认为这个行为是用户的点击触发的。等到接收到具体的数据以后,再把新开的空标签的地址重定向为获取到的地址。如果出错,则再把空标签关闭。

function click(){ 
  var w = window.open('','_blank');//先打开临时窗体,由于是点击事件内触发,不会被拦截 
  $.ajax({ 
    url:'...',
    ....
    success: function (data) { 
      w.location.href= data.url; //当回调的时候更改临时窗体的路径 
    }, 
    error:function(){ 
      w.close(); //回调发现无需打开窗体时可以关闭之前的临时窗体 
    } 
  }); 
} 

4. 重定向后dom数据获取问题

这个问题是发生在,前端向后端发起请求之后,后端把接口进行了重定向,之后获取到的数据可以在页面上正常的渲染展示。但是,当取dom元素希望获取该数据时,缺发现无法获取实际重定向之后获取的数据。我个人知识浅薄,目前不知道怎么解决,还请知道的大佬,可以给我点明一下~先提前THX~

5. js 实现记住密码

js 实现记住密码,就是利用cookie来进行信息存储。鉴于现在对这个实现的代码网上很多,我就不贴了,记录一下自己碰到的几个问题:

  1. document.cookie = ‘xxxx’设置失效?

    • chrome处于安全性考虑不能设置本地cookie,网页文件需要在服务器环境下执行,必须将html文件放置在服务器目录,如tomcat下, 然后启动服务器再打开浏览器地址栏再访问。

    • 注意失效时间(expires=xxx),如果失效时间设置成当前时间点那么document.cookie=”xxxx”的设置也是失效的

    • expires 如果不设置的话,关闭浏览器,cookies就失效,所以expires应该和cookie同时写入:
      document.cookie = type + ‘=’ + escape(name) + ‘; expires=’ + date.toGMTString();

  2. document.cookie = type + ‘=’ + escape(name) + ‘; expires=’ + date.toGMTString();

    • 为什么一定要用eascape()?

      因为cookie限制‘只能用在url中编码的字符串’,所以用escape吧字符串按url方法来编码,取值的时候用unescape()来解码。

    • 日期 toCMTSting()?

      日期的失效时间都是用格林威治时间格式,其他格式都没用。所以最后要转化

  3. expires 是不可读的,所以当你用document.cookie取expires时是取不到的,浏览器会自己判断cookie里面的内容有没有过期,一般取得出来的都是未过期的内容。

6. 前端解决跨域的方法

前端解决跨域

猜你喜欢

转载自blog.csdn.net/u011070165/article/details/78662921
今日推荐