如何禁用WebBrowser中的每个导航
本文关键字:导航 何禁用 WebBrowser | 更新日期: 2023-09-27 18:05:37
我有一个WebBrowser
控件,我根据用户输入动态刷新/更改url。我不想让用户导航,所以我将AllowNavigation
设置为false。这似乎没问题,但是下面的链接仍然是"活动的":
<a href=# onClick="javascript:window.close()">Close Page</a>
这里的问题是:如果用户点击它,并确认关闭在弹出窗口我不能再管理WebBrowser
。看起来它是关闭的,但最后一页仍然可见。我也不能删除这个链接,因为这个网站不是我管理的。
禁用控件?不,我必须允许用户从网页上高亮和复制文本。我有任何其他的选项禁用字面上的所有链接?
@TaW:这是我基于你的代码。所以我需要从代码中设置url并调用自定义url:
button_click()
{
webBrowser1_load_URL("http://website/somecheck.php?compname=" + textBoxHost.Text);
}
函数如下:
private void webBrowser1_load_URL(string url)
{
string s = GetDocumentText(url.ToString());
s = s.Replace(@"javascript:window.close()", "");
webBrowser1.AllowNavigation = true;
webBrowser1.DocumentText = s;
}
剩下的就是你的答案:private void webBrowser1_DocumentCompleted(对象发送者,
)WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.AllowNavigation = false;
}
public string GetDocumentText(string s)
{
WebBrowser dummy = new WebBrowser(); //(*)
dummy.Url = new Uri(s);
return dummy.DocumentText;
}
还是不行。请帮我找出我的代码的问题
如果您可以控制页面的加载,您可以抓取页面的文本并更改代码以禁用流氓脚本。您展示的那个可以简单地删除。当然,你可能要预见的不止一个……
显然,如果你可以完全不使用javascript,这可以缓解,但如果这不是一个选择,去那些做真正的或伪导航…
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.AllowNavigation = false;
}
private void loadURL_Click(object sender, EventArgs e)
{
webBrowser1.AllowNavigation = true;
string s = File.ReadAllText(textBox_URL.Text);
s = s.Replace("javascript:window.close()", "");
webBrowser1.DocumentText = s;
}
如果页面不在文件系统中,同样的技巧应该起作用,例如通过将URL加载到虚拟WebBrowser中,如下所示:
private void cb_loadURL_Click(object sender, EventArgs e)
{
string s = GetDocumentText(tb_URL.Text);
s = s.Replace("javascript:window.close()", "");
webBrowser1.AllowNavigation = true;
webBrowser1.DocumentText = s;
}
public string GetDocumentText(string s)
{
WebBrowser dummy = new WebBrowser(); //(*)
dummy.Url = new Uri(s);
return dummy.DocumentText;
}
注意:根据这篇文章,你不能像人们想象的那样自由地设置DocumentText
;可能是个bug…您也可以将(*)行移动到类级别,而不是每次都创建虚拟对象。然后,无论你做了多少修改,你总是有一个未修改的版本,用户可以保存在某处…