欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

網站繁簡切換的JS遇到頁面卡死的解決方法

 更新時間:2014年03月12日 15:46:40   投稿:whsnow  
最近開發(fā)了繁體版本的網站,在網上找了一段比較流行的繁簡切換的JS實現了,不過后來卻發(fā)現,有些頁面會卡死,針對這個問題,下面有個不錯的解決方法

公司打算開發(fā)繁體版本的網站,數據庫里的信息全是簡體,除了網頁上固定的文字手動翻譯了,文章內容標題都不是繁體。

于是在網上找了一段比較流行的繁簡切換的JS實現了,不過后來卻發(fā)現,有些頁面會卡死,根本無法執(zhí)行下去。彈出信息表明都是這個繁簡切換的JS帶來的問題。

仔細查看了下,發(fā)現原來是這個問題。分享下,也許有不少人遇到類似的問題。

先上代碼:

復制代碼 代碼如下:

//模仿語言包式的簡繁轉換功能插件!

var Default_isFT = 0 //默認是否繁體,0-簡體,1-繁體
var StranIt_Delay = 50 //翻譯延時毫秒(設這個的目的是讓網頁先流暢的顯現出來)

//-------代碼開始,以下別改-------
//轉換文本
function StranText(txt,toFT,chgTxt)
{
if(txt==""||txt==null)return ""
toFT=toFT==null?BodyIsFt:toFT
if(chgTxt)txt=txt.replace((toFT?"簡":"繁"),(toFT?"繁":"簡"))
if(toFT){return Traditionalized(txt)}
else {return Simplized(txt)}
}
//轉換對象,使用遞歸,逐層剝到文本
function StranBody(fobj)
{
if(typeof(fobj)=="object"){var obj=fobj.childNodes}
else
{
var tmptxt=StranLink_Obj.innerHTML.toString()
if(tmptxt.indexOf("簡")<0)
{
BodyIsFt=1
StranLink_Obj.innerHTML=StranText(tmptxt,0,1)
//StranLink.title=StranText(StranLink.title,0,1)
}
else
{
BodyIsFt=0
StranLink_Obj.innerHTML=StranText(tmptxt,1,1)
//StranLink.title=StranText(StranLink.title,1,1)
}
setCookie(JF_cn,BodyIsFt,7)
var obj=document.body.childNodes
}
for(var i=0;i<obj.length;i++)
{
var OO=obj.item(i)
if("||BR|HR|TEXTAREA|".indexOf("|"+OO.tagName+"|")>0||OO==StranLink_Obj)continue;
if(OO.title!=""&&OO.title!=null)OO.title=StranText(OO.title);
if(OO.alt!=""&&OO.alt!=null)OO.alt=StranText(OO.alt);
if(OO.tagName=="INPUT"&&OO.value!=""&&OO.type!="text"&&OO.type!="hidden")OO.value=StranText(OO.value);
if(OO.nodeType==3){OO.data=StranText(OO.data)}
else StranBody(OO)
}
}
function Traditionalized(cc){
var str='',ss=JTPYStr(),tt=FTPYStr();
var ssa = JTPYWord(),tta = FTPYWord();
for(var i=0;i<cc.length;i++)
{
if(cc.charCodeAt(i)>10000&&ss.indexOf(cc.charAt(i))!=-1)str+=tt.charAt(ss.indexOf(cc.charAt(i)));
else str+=cc.charAt(i);
}
for(var j=0;j<ssa.length;j++){
if(str.indexOf(ssa[j]) >= 0){
str = str.replace(ssa[j],tta[j]);
}else{
str = str;
}
}
return str;
}
function Simplized(cc){
var str='',ss=JTPYStr(),tt=FTPYStr();
var ssa = JTPYWord(),tta = FTPYWord();
for(var i=0;i<cc.length;i++)
{
if(cc.charCodeAt(i)>10000&&tt.indexOf(cc.charAt(i))!=-1)str+=ss.charAt(tt.indexOf(cc.charAt(i)));
else str+=cc.charAt(i);
}
for(var j=0;j<ssa.length;j++){
if(str.indexOf(tta[j]) >= 0){
str = str.replace(tta[j],ssa[j]);
}else{
str = str;
}
}
return str;
}

function setCookie(name, value) //cookies設置
{
var argv = setCookie.arguments;
var argc = setCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
if(expires!=null)
{
var LargeExpDate = new Date ();
LargeExpDate.setTime(LargeExpDate.getTime() + (expires*1000*3600*24));
}
document.cookie = name + "=" + escape (value)+((expires == null) ? "" : ("; expires=" +LargeExpDate.toGMTString()));
}

function getCookie(Name) //cookies讀取
{
var search = Name + "="
if(document.cookie.length > 0)
{
offset = document.cookie.indexOf(search)
if(offset != -1)
{
offset += search.length
end = document.cookie.indexOf(";", offset)
if(end == -1) end = document.cookie.length
return unescape(document.cookie.substring(offset, end))
}
else return ""
}
}

var StranLink_Obj=document.getElementById("StranLink")
if (StranLink_Obj)
{
var JF_cn="ft"+self.location.hostname.toString().replace(/\./g,"")
var BodyIsFt=getCookie(JF_cn)
if(BodyIsFt!="1")BodyIsFt=Default_isFT
with(StranLink_Obj)
{
if(typeof(document.all)!="object") //非IE瀏覽器
{
href="javascript:StranBody()"
}
else
{
href="#";
onclick= new Function("StranBody();return false")
}
title=StranText("點擊以繁體中文方式瀏覽",1,1);
innerHTML=StranText(innerHTML,1,1);
}
if(BodyIsFt=="1"){setTimeout("StranBody()",StranIt_Delay)}
}

起初我以為是那個遞歸的問題引起的,但是測試發(fā)現就算是很多字符,它仍然能快速的進行替換。

經過排查,原來是JS和OBJECT標簽會帶來卡死的問題。繁簡切換實現必然會跳過某些標簽,看到這段,它的作用就是來判斷替換哪些標簽里的文字。
復制代碼 代碼如下:

for(var i=0;i<obj.length;i++)
{
var OO=obj.item(i)
if("||BR|HR|TEXTAREA|".indexOf("|"+OO.tagName+"|")>0||OO==StranLink_Obj)continue;
if(OO.title!=""&&OO.title!=null)OO.title=StranText(OO.title);
if(OO.alt!=""&&OO.alt!=null)OO.alt=StranText(OO.alt);
if(OO.tagName=="INPUT"&&OO.value!=""&&OO.type!="text"&&OO.type!="hidden")OO.value=StranText(OO.value);
if(OO.nodeType==3){OO.data=StranText(OO.data)}
else StranBody(OO)
}

加上這個就一切正常了:
復制代碼 代碼如下:

if(OO.tagName=="OBJECT")continue;
if(OO.tagName=="SCRIPT")continue;

相關文章

最新評論