将标题为:使用JS代码替换网页翻译
要使用JavaScript翻译网页,可以使用Google Translate API。首先,需要在HTML文件中引入Google Translate库,然后创建一个翻译按钮并为其添加点击事件监听器。在事件处理函数中,获取需要翻译的文本内容,调用translate()方法进行翻译,并将翻译后的文本插入到目标元素中。最后,使用setTimeout()函数设置一个延时,以便在翻译完成后刷新页面。 以下是一个简单的示例代码: ```html
JS翻译网页替换代码,自动提取网页中所有文本节点,可根据需求来进行翻译或替换。
functionlisten(callback){//获取HTML文档中的所有元素,但不包括下列选择器的元素varexclude=['head','pre','script','textarea']//排除名单varselectors=[]exclude.forEach((item,index)=>{selectors.push(item)//排除该元素selectors.push(item+'*')//排除该元素后代})get(document.querySelectorAll('*:not('+selectors.join(',')+')'))//*:not(pre,pre*)//创建MutationObserver对象letobserver=newMutationObserver(function(mutations){mutations.forEach(function(mutation){//遍历新添加的节点for(leti=0;i<mutation.addedNodes.length;i++){letnode=mutation.addedNodes[i];//如果节点是元素节点,就调用get函数if(node.nodeType===1){callMyFunction(node)functioncallMyFunction(param1){setTimeout(function(){get([...param1.querySelectorAll('*'),param1])},300);}}}});});//设置MutationObserver的参数,表示监听所有元素的变化letconfig={childList:true,subtree:true};//启动MutationObserverobserver.observe(document,config);functionget(elements){//遍历所有元素for(leti=0;i<elements.length;i++){letelement=elements[i];//遍历元素的childNodesfor(letj=0;j<element.childNodes.length;j++){letnode=element.childNodes[j];//如果当前节点是一个文本节点(nodeType为3)且不包含子节点(nodeName为'#text'),就将文本添加到数组中if(node.nodeType===3&&node.nodeName.toLowerCase()==='#text'){//过滤掉文本中的换行符lettext=node.nodeValuevarv={a:false,b:false}text.slice(0,1)==""?v.a=true:v.a=falsetext.slice(-1)==""?v.b=true:v.b=falsetext=text.replace(/[\n\t\r]/g,'').trim();//如果文本不仅包含空白字符,就将它添加到数组中if(/\S/.test(text)){//不处理只有数字和符号的文本if(!/^[0-9\+\-\*\/\=><&\!@#\$%\^\*\\(\)\[\]\{\}_,.;',。、;’、]{1,}$/.test(text)){//---------------处理//翻译text//text="$"+text//---------------处理结束--显示v.a==true?text=""+text:textv.b==true?text=text+"":textif(!element.matches('script,textarea')){//单元素阻断,白名单node.nodeValue=textcallback.call({text:text,node:node,element:element})}else{//console.log("位于排除标签列表",element);}}else{//console.log("只有数字和符号的文本",text);}}}}}}}lettime=null;vardata=[]listen(function(){if(time!==null){clearTimeout(time);}time=setTimeout(async()=>{console.log(data);//抖动结束,开始翻译varsl=[]data.forEach((item,index)=>{//取textsl.push(item['text'])});//vartl=awaittranslation_arr(sl)//返回一个数组[[翻译结果,源语言类型],...*]//使用的谷歌批量翻译API,这里就不提供了vartl=[]sl.forEach((item,index)=>{tl.push('[编辑:'+item+','+index+']')});tl.forEach((item,index)=>{data[index]['node'].origText=data[index]['node'].nodeValuedata[index]['node'].nodeValue=item//更改文本});//这里的this指向的是input},500)data.push(this)})/*监听文本节点被点击document.onselectstart=function(e){console.log(e.target,e.target.origText);}*/