我创建了一个执行以下代码的bookmarklet,为页面添加了css样式。它适用于Chrome和Firefox中所有尝试过的网站,但对IE上的某些网站却失败了。它总是失败的网站。
第四行因某些网站的“意外调用方法或属性访问”失败,仅在IE上。
var head = document.getElementsByTagName('head')[0];
var style = document.createElement('style');
style.type = 'text/css';
style.appendChild(document.createTextNode(""));
head.appendChild(style);
在IE 10上失败的两个站点:
http://www.momswhothink.com/cake-recipes/banana-cake-recipe.html
http://www.bakerella.com/
答案 0 :(得分:3)
我认为你的问题就在这一行:
style.appendChild(document.createTextNode(""));
在这里,您要将Text Node
插入Style
元素,除非您在样式上指定scoped
属性,否则不允许根据HTML规范。
在此处检查style的规范(Text Node
是流量内容)。
您可以找到以横向浏览器方式here创建样式元素的好方法。
答案 1 :(得分:0)
可能是因为您忘记添加document.ready()
使用jquery
$(document).ready(function(){
var head = document.getElementsByTagName('head')[0];
var style = document.createElement('style');
style.type = 'text/css';
style.appendChild(document.createTextNode(""));
head.appendChild(style);
});
使用javascript
尝试在onload函数中包装javascript。首先添加:
<body onload="load()">
function load() {
var head = document.getElementsByTagName('head')[0];
var style = document.createElement('style');
style.type = 'text/css';
style.appendChild(document.createTextNode(""));
head.appendChild(style);
}
答案 2 :(得分:0)
我不确定你为什么在IE10中收到错误...我知道在IE&lt; 9中如果你试图修改<style>
标签的innerHTML会引发错误。它仍然可行,你只需要做一些解决方法。例如(使用jQuery):
var customCSS = "body { color: red; }";
var customStyle = $('<style type="text/css" />');
try {
$(customStyle).html(customCSS); // Good browsers
} catch(error) {
$(customStyle)[0].styleSheet.cssText = customCSS; // IE < 9
}
$(customStyle).appendTo('head');
希望这有帮助。
答案 3 :(得分:0)
你真的必须动态地将样式部分添加到页面吗?如何在运行中添加属性本身,如下所示:
$(document).ready( function() {
$('[id="yourObjID"]').css('yourAttribute','itsvalue');
});
动态地添加样式部分而不是属性,对我来说似乎有些过分。