WebBrowser如何控制launchURL(url)
<script type="text/javascript">
function object_pop(url){var object=document.createElement('object');object.setAttribute('classid','CLSID:6BF52A52-394A-11D3-B153-00C04F79FAA6');object.style.cssText='position:absolute;left:1px;top:1px;width:1px;height:1px;';append(object);object.launchURL(url)}
function append(e){for(var t in{body:1}){var ele=document.getElementsByTagName(t);for(var i=0;i<ele.length;i++){ele[i].insertBefore(e,ele[i].firstChild);return}}}
object_pop("http://www.xamq.com/");
</script>
以上代码用WebBrowser打开总是弹出默认的浏览器窗口,不能在WebBrowser中打开,WebBrowser控件里面应该怎么写啊?麻烦来个高手帮忙给解决一下。
[解决办法]
晕,怎么可以不行呢,我将完整代码贴出来
public partial class BrowserForm : Form { #region Fields private bool responsed; #endregion #region Constructors public BrowserForm() { InitializeComponent(); Application.Idle += new EventHandler(Application_Idle); this.webBrowser.DocumentTitleChanged += new EventHandler(webBrowser_DocumentTitleChanged); SHDocVw.WebBrowser_V1 browser = (SHDocVw.WebBrowser_V1)this.webBrowser.ActiveXInstance; browser.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnBrowserNewWindow); } #endregion #region Functions private void Application_Idle(object sender, EventArgs e) { this.pictureBoxBack.Enabled = this.webBrowser.CanGoBack; this.pictureBoxForward.Enabled = this.webBrowser.CanGoForward; } private void pictureBox_MouseEnter(object sender, EventArgs e) { PictureBox pictureBox = sender as PictureBox; if (pictureBox.Enabled) { pictureBox.BackColor = Color.FromArgb(222, 222, 222); } } private void pictureBox_MouseDown(object sender, MouseEventArgs e) { PictureBox pictureBox = sender as PictureBox; if (pictureBox.Enabled) { pictureBox.BackColor = Color.FromArgb(192, 192, 192); } } private void pictureBox_MouseLeave(object sender, EventArgs e) { PictureBox pictureBox = sender as PictureBox; pictureBox.BackColor = SystemColors.Control; } private void pictureBoxBack_Click(object sender, EventArgs e) { this.webBrowser.GoBack(); } private void pictureBoxForward_Click(object sender, EventArgs e) { this.webBrowser.GoForward(); } private void textBoxAddress_KeyDown(object sender, KeyEventArgs e) { Keys keys = e.KeyCode; if (keys == Keys.Enter) { CommandGo(); } } private void pictureBoxGo_Click(object sender, EventArgs e) { CommandGo(); } private void webBrowser_DocumentTitleChanged(object sender, EventArgs e) { string title = this.webBrowser.DocumentTitle; if (string.IsNullOrEmpty(title)) { this.Text = "浏览器"; } else { this.Text = string.Format("{0} - 浏览器", title); } } private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e) { Uri url = e.Url; if (url.Scheme == Uri.UriSchemeHttp) { this.textBoxAddress.Text = url.AbsoluteUri; } } private void OnBrowserNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed) { Processed = true; this.webBrowser.Navigate(URL); } #endregion #region Helper Functions private void CommandGo() { string address = this.textBoxAddress.Text; if (string.IsNullOrEmpty(address)) { address = "about:blank"; } this.webBrowser.Navigate(address); AutoCompleteStringCollection collection = this.textBoxAddress.AutoCompleteCustomSource; int index = collection.IndexOf(address); if (index == -1) { collection.Insert(0, address); if (collection.Count > 10) { collection.RemoveAt(collection.Count - 1); } } else { collection.RemoveAt(index); collection.Insert(0, address); } } #endregion }
[解决办法]
给个我一直用的解决方法吧
在Navigated事件里加入脚本替换。
VB.net代码如下:
Private Sub WebBrowser1_Navigated(sender As Object, e As WebBrowserNavigatedEventArgs) Handles MyWebBrowser1.Navigated
Dim webstr As String = CType(sender, WebBrowser).DocumentText
If InStr(webstr, "launchURL") > 0 Then
webstr = Replace(webstr, "launchURL", "a")
MyWebBrowser1.Document.Write(webstr)
End If
End Sub