因爲工做中有不少時候須要用到window.external,之前一直稀裏糊塗的,今天又被人問到,因而突擊學習了一下,記下備忘。
--------------------------------------
咱們在js中能夠經過window.external.myfunc()來調用瀏覽器提供的外部方法myfunc。能夠讓網頁內的js腳本中能調用C++代碼。
IE的已默認實現了一些外部方法,能夠參見
1:某文章:http://www.it118.org/Specials/2e876829-483a-4216-a6ef-08a472c94297/8f8d0507-b4c8-4d92-8e35-3c88dade3a17.htm
2:官方文檔裏有更多: http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/external.asp
在嵌入了瀏覽器的工程中,除了IE默認提供的外部方法以外,須要網頁的腳本中能調用C++代碼,要實現這種交互,就必須實現腳本擴展。實現腳本擴展就是在程序中實現一個IDispatch接口,經過CHtmlView類的OnGetExternal虛函數返回此接口指針,這樣就能夠在腳本中經過window.external.XXX(關鍵字window能夠省略)來 引用接口暴露的方法或屬性(XXX爲方法或屬性名)。
參考《實現腳本擴展》http://topic.csdn.net/u/20080116/17/5fbac468-1188-4c9c-9339-ad48edd8a4d3.html
Firefox與Chrome也提供了external對象,例如,他們都默認的實現了opensearch的兩個外部方法:
AddSearchProvider IsSearchProviderInstalled
Chrome下,能夠在控制檯輸入window.external看到。
Firefox默認提供的外部方法稍稍多一些,也能夠能夠經過firebug看到。
window.external.AddFavorite這個把網站添加到瀏覽者收藏夾的腳本你們應該經常看過,但你還知道window.external的另一些用法呢?因爲是一些關於系統文件操做的命令,由於安全設置有些腳本會出錯誤.
1.external.AddDesktopComponent 把網站做爲用戶的Active桌面
語法:external.AddDesktopComponent(地址,類型[image/website],左距離,頂距離,寬度,長度)
function j_adc(){ //例子
window.external.AddDesktopComponent("http://www.i0713.net","website",0,0,800,600);
}
2.external.AddFavorite 把網站加入到用戶的收藏夾
語法:external.AddFavorite(網址,標題);
function j_af(){
window.external.AddFavorite(location.href, document.title);
}
3.external.NavigateAndFind 搜索指定網站中的某個字段
語法:external.NavigateAndFind(文件地址,關鍵字,_Target)
<script language="JavaScript">
function j_an(){
window.external.NavigateAndFind("http://www.i0713.net/IT/prog/find.asp",gosearch.value,"");
}
</script>
4.external.ShowBrowserUI 調用語言選擇窗口與收藏夾管理窗口
語法:external.ShowBrowserUI(類型[LanguageDialog/OrganizeFavorites], null)
<input type="button" name="Button" value="語言設置" onclick="window.external.ShowBrowserUI('LanguageDialog', null)">
<input type="button" name="Submit2" value="整理收藏夾" onclick="window.external.ShowBrowserUI('OrganizeFavorites', null)">
5.external.ImportExportFavorites 導入與導出用戶收藏夾
語法:external.ImportExportFavorites(導入/true 導出/false, 文件路徑)
<input type="button" name="Button" value="導入收藏夾" onClick=window.external.ImportExportFavorites(true,"http://www.i0713.net");>
<input type="button" name="Button3" value="導出收藏夾" onClick=window.external.ImportExportFavorites(false,"http://www.i0713.net");>
TANTOM:無憂腳本的也有相似的程序,你們能夠試試,但用php實現不了接收用戶傳來的收藏夾資料,導入卻很簡單。手上有用Asp與Php來接收用戶收藏夾的代碼,Asp沒試過不知道可不可用,PHP的試過,但只能夠接到75%的收藏夾資料,挺奇怪的,有興趣要php與asp代碼的在論壇發個帖子吧。
External還有幾個用法,但沒什麼用途,沒列出來。php