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控件里面应该怎么写啊?麻烦来个高手帮忙给解决一下。
...全文
410 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做过浏览器吗,帮忙解决一下。。。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
源码链接: https://pan.quark.cn/s/064420f76eb8 ### A2L文件制作教程与规范 ### #### 一、引言 在汽车电子领域,A2L文件是一种用于阐释电子控制单元(ECU)测量与校准数据的标准格式。该格式依据ASAP2(Automotive Standard Input Output Bus Protocol for Parameter Access)标准进行定义,并在电子控制单元的开发、测试及诊断环节中得到广泛运用。本指南将系统性地介绍A2L文件的编制流程及其遵循的规范,旨在为工程师群体提供具有实践价值的指导。 #### 二、A2L文件基础知识 1. **定义**:A2L文件是一种基于ASCII码的文本性载体,主要功能是存储电子控制单元内所有可测量及可校准对象的详细信息。 2. **作用**: - **参数管理**:系统性地记录电子控制单元中的参数配置详情。 - **诊断支持**:为故障诊断提供必要的数据支撑,包括故障代码的读取等操作。 - **软件开发**:在软件开发阶段,对参数配置进行辅助性管理。 3. **组成结构**: - **头部信息**:涵盖文件版本号、生成日期等基础性信息。 - **模块定义**:将每个电子控制单元设定为一个独立的模块进行详细描述。 - **测量点和校准通道**:明确电子控制单元内部测量点与校准通道的具体设置。 - **特征描述**:对电子控制单元的特定性能进行说明,例如温度传感器的性能曲线。 #### 三、A2L文件制作工具 - **ASAP2Editor**:由Vector Informatik GmbH开发的一款专业级工具,专门用于A2L...

111,130

社区成员

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

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

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