我找到了自己问题的答案。事实证明 IE6 有一个模糊的安全措施,它不允许对其他脚本间接创建的元素进行操作(即使它们来自完全相同的来源/域)。
在这种情况下,简化的方法工作正常,但实际代码失败了。唯一的区别是实际代码使用 jQuery 来存储数据、创建元素和插入元素。最后一个动作(插入元素)是问题所在。
我变了
/**
* @param {jQuery|HTMLElement} $nextnode
*/
function addStyleTag( text, $nextnode ) {
var s = document.createElement( 'style' );
// IE: Insert into document before setting cssText
if ( $nextnode ) {
// If a raw element, create a jQuery object, otherwise use directly
if ( $nextnode.nodeType ) {
$nextnode = $( $nextnode );
}
$nextnode.before( s );
/* ... */
到:
/**
* @param {jQuery|HTMLElement} nextnode
*/
function addStyleTag( text, nextnode ) {
var s = document.createElement( 'style' );
// IE: Insert into document before setting cssText
if ( nextnode ) {
// If a jQuery object, get raw element, otherwise use directly
if ( nextnode.jquery ) {
nextnode = nextnode.get( 0 );
}
nextnode.parentNode.insertBefore( s, nextnode );
/* ... */
这解决了问题。