2010-04-08 39 views
3

我需要在IE上下文菜單中添加一個菜單項。它與Google右鍵點擊IE時自定義的上下文菜單「搜索Google for xxx」類似。如何實際定製IE上下文菜單?

我做了一項研究,發現在IE瀏覽器中覆蓋IDocHostUIHandler :: ShowContextMenu可以自定義IE上下文菜單。示例項目可以在codeproject中發佈的Popup攔截器項目中找到。它運作良好,易於實施。 但是這種方法有問題。問題是它將與每個MSDN的其他附件的上下文菜單自定義衝突。

在MSDN Internet Explorer Center論壇中,有一些關於此主題的討論。但是沒有正確的實現發佈。

如果有人有這方面的經驗,請分享您的想法。謝謝!

回答

2

請參閱Adding Entries to the Standard Context Menu在MSDN上。

對於一些示例代碼,下載並解壓縮Web Accessories for Internet Explorer 5(該機制仍然適用於IE版本,最高可達8)。有關各種IE上下文菜單擴展的示例,請參閱ie5wa.inf*.html

請注意,abive是在沒有COM的情況下完成的,純粹通過一個註冊表設置和一個包含一個腳本(Javascript,JScript,VBScript等)的文件的文件。腳本(JScript,VBScript)可能反過來與COM對象一起工作,如果你的菜單行爲邏輯駐留在這樣的對象,例如

  • 創建HKCU\Software\Microsoft\Internet Explorer\MenuExt\My &Context Menu" registry key ( &`之前的menu accelerator信,如果有的話)
  • 設置的默認值的關鍵指向包含執行上下文菜單操作(S腳本代碼的文件),可能與互動一個COM對象(必須支持IDispatch IIRC;還讀取了在My Computer Security Zone
  • 創建二進制contexts值(0x02圖片,0x10用於選擇等)時,應顯示的新的上下文菜單,其調節
0

我自定義了我的IE瀏覽器以導航到選定的文本。你可以閱讀完整的故事並獲得詳細的源代碼here

我的解決方案的爐膛是圍繞建立以下JavaScript代碼和註冊表項[HKEY_CURRENT_USER \軟件\微軟\的Internet Explorer \ MenuExt]:

var parentwin = external.menuArguments; 
    var doc = parentwin.document; 
    var sel = doc.selection; 
    var rng = sel.createRange(); 
    var str = new String(rng.text); 

    if(0 < str.length) 
    { 
    if (str.indexOf("http")!=0) 
     window.open("http://"+str, "_blank"); 
    else 
     window.open(str, "_blank"); 
    } 
+0

當然,你最終會與我的定製javascript代碼以導航到「http://www.google.com/search?q= 」而不是導航到「 – hemme 2011-06-17 21:07:53