2009-03-03 63 views
7

我正在做一个JavaScript记忆游戏,需要显示日文字符。是否有跨浏览器的方式来检测对亚洲语言的支持,还是专门针对日语?是否可以检测到东亚语言支持?

window.navigator.language将设置为浏览器的语言,但会漏掉没有将日语设置为浏览器语言(?)的用户。

回答

6

是否有跨浏览器检测亚洲语言支持的方式?

你只是指“有没有安装日文字体”?因为现代操作系统可以配置的“支持亚洲语言”的唯一方面就是知道像Shift-JIS这样的字符编码是否已知(Windows上的代码页932)。但是,你通常不需要这样做,因为你可以使用UTF-8,它比任何地方都更清洁和支持。

一般而言,您无法直接判断特定字符范围的字体是否已安装,但存在迂回的方式。像例如测量对网页的文本的渲染尺寸:

var half= document.createElement('span'); 
var full= document.createElement('span'); 
half.appendChild(document.createTextNode('\uFF71')); 
full.appendChild(document.createTextNode('\u30A2')); 
document.body.insertBefore(half, document.body.firstChild); 
document.body.insertBefore(full, document.body.firstChild); 
var havejapanesefont= half.offsetWidth!=full.offsetWidth; 
document.body.removeChild(half); 
document.body.removeChild(full); 

这暂时创建包含半宽和片假名“A”的全角变元件。如果日文字体可用,我们会期望它们具有不同的宽度。如果不存在这样的字体,它们很可能会呈现为具有相同宽度的相似的“不可修改字符”字形。

+0

非常聪明的黑客! – 2009-03-03 11:53:56

2

您的服务器可能能够检查Accept-Charset标题(如果它不包含日语字符),那么它将重定向到警告页面。不幸的是,正如this thread所示,这些标题对JavaScript不可用。

相关问题