JavaScript 跨浏览器兼容:Firefox 与 IE 的innerText、剪贴板及系统信息获取

作者:交互手记时间:2026-10-30 12:54:45浏览:114

本文整理了JavaScript在Firefox与IE浏览器下的关键兼容细节。针对Firefox不支持innerText的问题,提供了textContent替代方案及document.all判断逻辑。详细说明了在Firefox中启用剪贴板写入权限的配置方法(signed.applets.codebase_principal_support),并给出了兼容多浏览器的复制代码。此外,还介绍了利用ActiveXObject在IE环境下获取客户端电脑名的实现方式及安全限制。

许多技术细节容易在开发过程中被遗忘,因此有必要将这些关键点记录下来以备查阅。



Firefox与IE的innerText兼容处理

在Firefox浏览器中,对象不支持 innerText 属性。



若尝试通过 alert() 显示 obj.innerText 的值,结果将为 undefined。



Firefox 虽然支持 innerHTML,但不支持 innerText。若需在不使用 innerHTML 的情况下实现类似功能,可参考以下代码方案。



由于Firefox不支持 document.all 对象,因此在考虑浏览器兼容性时,获取DOM元素通常推荐使用 document.getElementById('yourid')。




if (document.all) { // 判断是否为IE浏览器


// 也可通过 if(navigator.appName.indexOf("Explorer") > -1) 判断。若为IE,可设置 obj.innerText = "myText";否则,应使用 obj.textContent = "yourtext" 作为替代方案。


}

跨浏览器剪贴板复制功能实现

以下代码实现了在Firefox和IE浏览器中兼容的复制到剪贴板功能。



该函数在Firefox环境下运行时,需要修改浏览器的特定配置才能生效。


1. 打开Firefox浏览器,在地址栏输入 about:config 并回车。


2. 在配置列表中找到 signed.applets.codebase_principal_support,将其值设置为 true。




function copyToClipboard(txt) {



if(window.clipboardData)


  { 

window.clipboardData.clearData();


window.clipboardData.setData('Text', txt);


  } 

else if(navigator.userAgent.indexOf('Opera') != -1)


  { 

window.location = txt;


  } 

else if (window.netscape)


  { 

try {


netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');


    } 

catch (e)


    { 

alert('被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true');


    } 

var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);


if (!clip)


return;


var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);


if (!trans)


return;


trans.addDataFlavor('text/unicode');


var str = new Object();


var len = new Object();


var str = Components.classes['@mozilla.org/supports-string;1'].createInstance(Components.interfaces.nsISupportsString);


var copytext = txt;


str.data = copytext;


trans.setTransferData('text/unicode', str, copytext.length*2);


var clipid = Components.interfaces.nsIClipboard;


if (!clip)


return false;


clip.setData(trans, null, clipid.kGlobalClipboard);


  } 

return true;


} 

或者使用下面这段功能相同的代码。



function CopyToClipboard(meintext) {


{

if (window.clipboardData)


    {

// IE的方式


window.clipboardData.setData('Text', meintext);


    }

else if (window.netscape)


    { 

// 这一点很重要,但官方文档中并未明确说明:


// 你需要对代码进行签名以启用此功能,或参考下方说明


netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');



// 创建剪贴板接口


var clip = Components.classes['@mozilla.org/widget/clipboard;1']


.createInstance(Components.interfaces.nsIClipboard);


if (!clip) return;


//alert(clip);


// 创建传输对象


var trans = Components.classes['@mozilla.org/widget/transferable;1']


.createInstance(Components.interfaces.nsITransferable);


if (!trans) return;



// 指定我们要获取的数据类型,此处为文本


trans.addDataFlavor('text/unicode');



// 为了从传输对象中提取数据,我们需要两个新对象


// 用于存储数据


var str = new Object();


var len = new Object();


var str = Components.classes['@mozilla.org/supports-string;1']


.createInstance(Components.interfaces.nsISupportsString);


var copytext = meintext;


str.data = copytext;


trans.setTransferData('text/unicode', str, copytext.length*2);


var clipid = Components.interfaces.nsIClipboard;


if (!clip) return false;


clip.setData(trans, null, clipid.kGlobalClipboard);


    }

else


    {

return false;


    }

alert('您已经复制: ' + meintext);


return false;


}

IE环境下获取客户端电脑名

使用JavaScript获取客户端电脑名称。



前几天在学习PHP时,希望实现获取客户端电脑名称的功能。在ASP及.NET环境下已有相关实现示例,但在PHP中一直未找到直接方法。后来在国外论坛找到了一些JavaScript代码,但这些代码仅在IE环境中运行,且必须将浏览器安全级别设置得相当低才能生效。



try {


{

var ax = new ActiveXObject('WScript.Network');


document.write('User: ' + ax.UserName + '<br />');


document.write('Computer: ' + ax.ComputerName + '<br />');


}

} catch (e) {


{

document.write('访问当前电脑名操作被拒绝' + '<br />');


}

作者最新文章