在C#中 webbrowser的使用心得

來源:互聯網
上載者:User

1.首先是屏蔽瀏覽器右鍵菜單的問題,
用以下代碼可以讓瀏覽器用自己的右鍵菜單:
tempBrowser.ContextMenuStrip = this.contextMenuStrip1;
tempBrowser.IsWebBrowserContextMenuEnabled = false;

但是很不幸,上面的代碼在有的機器上不起作用,開始以為是環境或者流氓外掛程式的問題,折磨了很久無果,後來把.net升級到4.0竟然解決了這個問題,估計就是微軟webbrowser控制項的問題

2.屏蔽拷貝快速鍵和截屏快速鍵

public bool PreFilterMessage(ref Message msg)
{
if (msg.Msg == WM_KEYDOWN || msg.Msg == WM_KEYUP)
{
StringBuilder sb = new StringBuilder(50);
GetClassName(msg.HWnd, sb, 50);

if (sb.ToString().ToLower() == "internet explorer_server")
{
if ((Control.ModifierKeys == Keys.Control && (((Keys)msg.WParam.ToInt32() & Keys.KeyCode) == Keys.C)) || ((Keys)msg.WParam.ToInt32() & Keys.KeyCode) == Keys.PrintScreen || ((Keys)msg.WParam.ToInt32() & Keys.KeyCode) == Keys.Menu)
{
MessageBox.Show("當前系統禁止內容複寫,如需系統內部複製粘貼,請使用右鍵菜單的功能!", "屏蔽");
Clipboard.SetDataObject("null");
return true;
}
}
}

return false;
}

3.解決webbrowser遇到window.open無法開啟頁面的問題
是因為開啟頁面的url一般是通過myBrowser.StatusText來擷取的,但是window.open是無法擷取真正的url的,解決辦法就是在webbrowser的NewWindow事件中特殊處理window.open的事件,擷取真正的url地址
WebBrowser myBrowser = (WebBrowser)sender;
TabPage mypage = (TabPage)myBrowser.Parent;
string NewURL = "";
string html = myBrowser.Document.ActiveElement.OuterHtml;
string pattern = @"<button.*?onclick=.*\('(.*)'\).*";
MatchCollection matches = Regex.Matches(html, pattern, RegexOptions.IgnoreCase);
if (matches.Count == 1)
{
Match m = matches[0];
Group g = m.Groups[1];
if (g != null && g.Length > 0)
{
string address = myBrowser.Url.Scheme + "://" + myBrowser.Url.Host + ":" + myBrowser.Url.Port + g.ToString();
NewURL = address.Replace("&", "&");
}
}
NewURL = string.IsNullOrEmpty(NewURL) ? myBrowser.StatusText : NewURL;

很遺憾這種方法只能適合一頁中只有一個window.open的情況,如果有多個window.open,我們可以用下面的方法:在webbrowser的DocumentCompleted中,if (mybrowser.DocumentText.IndexOf("window.open(") > -1),然後把所有window.open替換為window.location.href。但是後來發現系統執行過這個過程之後,webbrowser的url會變成原來的url,不知道有沒有朋友能知道為什麼。

4.屏蔽webbrowser拖拽網頁內容到外部word等的問題
private void tempBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser tempBrowser = (WebBrowser)sender;
tempBrowser.Parent.Text = tempBrowser.DocumentTitle;
HtmlElement ele = tempBrowser.Document.CreateElement("script");//新增
ele.SetAttribute("type", "text/javascript");
ele.SetAttribute("text", "document.body.ondragstart=function(){window.event.returnValue=false;};");
tempBrowser.Document.Body.AppendChild(ele);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.