我有WebBrowser
控件,我根据用户输入动态刷新/更改网址。我不想让用户导航,因此我将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(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.AllowNavigation = false;
}
public string GetDocumentText(string s)
{
WebBrowser dummy = new WebBrowser(); //(*)
dummy.Url = new Uri(s);
return dummy.DocumentText;
}
仍然无法正常工作。请帮我用我的代码发现问题。
答案 0 :(得分:1)
如果您可以控制页面的加载,则可以获取页面文本并更改代码以禁用流氓脚本。您展示的那个可以简单地删除。当然,你可能不得不更多地预测..
显然,如果你可以完全不使用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;
}
注意:根据this帖子,您不能像人们想象的那样自由地设置DocumentText
;可能是一个错误..每次你也可以将(*)行移动到类级别,而不是创建虚拟。然后,无论您需要进行多少更改,您将始终拥有未更改的版本,用户可以例如保存在某个地方..