WebBrowser如何控制launchURL(url)

liyifei1234 2012-10-10 06:09:28
<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控件里面应该怎么写啊?麻烦来个高手帮忙给解决一下。
...全文
330 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiven008 2012-10-14
  • 打赏
  • 举报
回复
替换掉了就脚本出错了怎么可能还会弹出呢。会不会你从VB.net转成C#的时候有点问题。至于你说的要从webbrowser弹出这个不能实现,因为它是从media player控件弹出的,无法捕捉到,不过你可以灵活处理,提取它的URL,然后Navigate就可以。有问题直接加QQ吧,8426516
liyifei1234 2012-10-14
  • 打赏
  • 举报
回复
我都替换成A了可还是弹出ie晕了。。
liyifei1234 2012-10-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
不用的,不管你替换成什么字符都是可以的,替换成l aunchURL的目的只是为了显示,比如你打开你发的这个帖子的页面,如果替换成a或者替换成其他的话那么你看到的所有launchURL的地方全部都会变成a;那么只要设置ScriptErrorsSuppressed = True就解决了。不过我后来又测试了下你最好在DocumentTitleChanged事件里处理,只有这样才能真正加载完文档。
[/Quote]
换成任意字符了岂不是不弹出窗口了?我是想让它弹出来,但是弹到webbrowser里。。
kiven008 2012-10-13
  • 打赏
  • 举报
回复
不用的,不管你替换成什么字符都是可以的,替换成l aunchURL的目的只是为了显示,比如你打开你发的这个帖子的页面,如果替换成a或者替换成其他的话那么你看到的所有launchURL的地方全部都会变成a;那么只要设置ScriptErrorsSuppressed = True就解决了。不过我后来又测试了下你最好在DocumentTitleChanged事件里处理,只有这样才能真正加载完文档。
liyifei1234 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
不对意思刚才这个还是有点小问题,优化后代码如下:
VB.net代码如下:
webstr = Replace(webstr, "launchURL", "l aunchURL")
[/Quote]
那是不是还要再替换一次啊?
webstr = Replace(webstr, "launchURL", "a")
liyifei1234 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
你下载以后运行打开http://www.xamq.com/tan.htm就是最上面那段弹窗代码,就会自动弹出IE默认的窗口。请问用什么办法能解决?
liyifei1234 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
晕,怎么可以不行呢,我将完整代码贴出来

C# code

public partial class BrowserForm : Form
{
#region Fields

private bool responsed;

#endregion

#region Constructors
……
[/Quote]
你看看这个高手写的多标签的浏览器,为什么就不行啊?源代码下载地址http://www.codeproject.com/KB/cpp/ExtendedWebBrowser/ExtendedWebBrowser2_Src.zip
kiven008 2012-10-13
  • 打赏
  • 举报
回复
不对意思刚才这个还是有点小问题,优化后代码如下:
VB.net代码如下:
Private Sub WebBrowser1_Navigated(sender As Object, e As WebBrowserNavigatedEventArgs) Handles WebBrowser1.Navigated
Dim webstr As String = CType(sender, WebBrowser).DocumentText
If InStr(webstr, "launchURL") > 0 and InStr(webstr, "</html>") > 0 Then
webstr = Replace(webstr, "launchURL", "l aunchURL")
MyWebBrowser1.Document.Write(webstr)
End If
End Sub
因为Navigated有时会多次触发,这里使用了InStr(webstr, "</html>") > 0确保整个文档已经下载完毕,将 "launchURL"替换为"l aunchURL"是为了在有些页面上launchURL不是以脚本存在而是以文本存在的时候不会有太大影响!
kiven008 2012-10-13
  • 打赏
  • 举报
回复
使用该方法可以事先在配置文件里定义一些超级弹窗的特征串,然后在使用过程动态更新最新特征串达到屏蔽弹窗,不过需要一定的JS基础!希望对你有所帮助!
kiven008 2012-10-13
  • 打赏
  • 举报
回复
给个我一直用的解决方法吧
在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
hustcyb 2012-10-11
  • 打赏
  • 举报
回复
晕,怎么可以不行呢,我将完整代码贴出来
    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
}

liyifei1234 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
你需要处理WebBrowser的NewWindow事件,下面代码使用当前浏览器打开新窗口

C# code



SHDocVw.WebBrowser_V1 browser = (SHDocVw.WebBrowser_V1)this.webBrowser.ActiveXInstance;
browser.NewWindow += new……
[/Quote]


帅哥,我是菜鸟,您能将你写的代码全都发给我让我抄抄不?
liyifei1234 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
你需要处理WebBrowser的NewWindow事件,下面代码使用当前浏览器打开新窗口

C# code



SHDocVw.WebBrowser_V1 browser = (SHDocVw.WebBrowser_V1)this.webBrowser.ActiveXInstance;
browser.NewWindow += new……
[/Quote]
这个代码我试过好像不行啊?还是弹默认的浏览器。。我再去试一次。。
hustcyb 2012-10-10
  • 打赏
  • 举报
回复
你需要处理WebBrowser的NewWindow事件,下面代码使用当前浏览器打开新窗口


SHDocVw.WebBrowser_V1 browser = (SHDocVw.WebBrowser_V1)this.webBrowser.ActiveXInstance;
browser.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnBrowserNewWindow);


private void OnBrowserNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
{
Processed = true;

this.webBrowser.Navigate(URL);
}

如果你需要在新的Tab页中打开新的页面,处理起来复杂一点,不过原理差不多
liyifei1234 2012-10-10
  • 打赏
  • 举报
回复
有没有人用WebBrowser做过浏览器吗,帮忙解决一下。。。

109,891

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧