我只是想解釋更多以前的馬克的答案(有些人不明白,例如user7892745)。
1)當你啓動你的網頁或網頁應用程序時,它會檢查一個不尋常的字體(如中文Konfuciuz字體http://www.fontspace.com/apostrophic-lab/konfuciuz)。
下面是樣本網頁與功能的代碼檢查字體(稱爲isFontAvailable):
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>
/**
* Checks if a font is available to be used on a web page.
*
* @param {String} fontName The name of the font to check
* @return {Boolean}
* @license MIT
* @copyright Sam Clarke 2013
* @author Sam Clarke <[email protected]>
*/
(function (document) {
var width;
var body = document.body;
var container = document.createElement('span');
container.innerHTML = Array(100).join('wi');
container.style.cssText = [
'position:absolute',
'width:auto',
'font-size:128px',
'left:-99999px'
].join(' !important;');
var getWidth = function (fontFamily) {
container.style.fontFamily = fontFamily;
body.appendChild(container);
width = container.clientWidth;
body.removeChild(container);
return width;
};
// Pre compute the widths of monospace, serif & sans-serif
// to improve performance.
var monoWidth = getWidth('monospace');
var serifWidth = getWidth('serif');
var sansWidth = getWidth('sans-serif');
window.isFontAvailable = function (font) {
return monoWidth !== getWidth(font + ',monospace') ||
sansWidth !== getWidth(font + ',sans-serif') ||
serifWidth !== getWidth(font + ',serif');
};
})(document);
function isProtocolAvailable()
{
if (isFontAvailable('Konfuciuz'))
{
return true;
}
else
{
return false;
}
}
function checkProtocolAvail()
{
if (isProtocolAvailable())
{
alert('Custom protocol is available!');
}
else
{
alert('Please run executable to install protocol!');
}
}
</script>
<h3>Check if custom protocol was installed or not</h3>
<pre>
<input type="button" value="Check if custom protocol was installed!" onclick="checkProtocolAvail()">
</body>
</html>
2)當用戶打開該網頁第一次,字體將不會被安裝,所以他會得到一條消息說「請運行可執行文件以安裝自定義協議...」。
3)他將運行將安裝字體的可執行文件。你的EXE可以直接將字體文件複製(在我的情況下,它是KONFUC __ TTF)到C:\ Windows目錄或使用這樣的代碼(Delphi的例子):
// Adding the font ..
AddFontResource(PChar('XXXFont.TTF'));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
4)之後,當用戶再次運行Web應用程序,他得到「自定義協議可用!」消息,因爲這次是安裝字體。
在Google Chrome,Internet Explorer和Firefox上測試 - 效果很好!
您可能想要閱讀http://stackoverflow.com/questions/836777/how-to-detect-browsers-protocol-handlers – 2010-05-20 08:39:42
Thx,已經嘗試過大部分描述的方法。似乎沒有好的方法可以在所有流行的瀏覽器中實現此功能,而無需警報或其他問題。 – 2010-05-20 08:50:07