attempted to assign to readonly property的中文解释为:尝试分配定义只读属性
let tablist = document.querySelectorAll('.div')
for (let i = 0; i < tablist.length; i++) {
tablist[i].style = ''
}
// 或者
let dom = document.querySelector('.div')
dom.style = 'font-weight: 700;'
对于以上代码,在安卓和chrome浏览器中运行正常,但是在ios设备中可能(iphone6或safari10)会出现attempted to assign to readonly property的报错
这是为什么呢?可以了解为在获取dom后不能对style属性直接赋值,只能对style.属性名 = ‘’ 这种方式赋值。否则ios手机直接报错。
TrackJS指出,这个报错是一个 ios中webkit内核的bug(而且每个框架都以独特的方式遇到这个问题.
webkit bugs 也确认了该问题,而且每个框架都以独特的方式遇到这个问题,Angular以及vue.esm.js等。后来发现直接删除js开头的’use strict’;就不会报错了,但是这样js语法就不是严格模式了。
·
对上面的代码,如果你这样赋值就不会产生报错
let tablist = document.querySelectorAll('.div')
for (let i = 0; i < tablist.length; i++) {
//tablist[i].style = '' error
tablist[i].removeAttribute('style')
}
// 或者
let dom = document.querySelector('.div')
//dom.style = 'font-weight: 700;' error
dom.style.fontWeight = 700
·
参考文档:tuy博客