积极答复者
点击按钮后,webBrowser载入页面,并且页面自动向下滚动

问题
答案
-
- csdn上某牛人的回帖
- C# code
.... { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 访问链接 /// </summary> public const string url = "http://baike.baidu.com/view/{0}.htm"; /// <summary> /// 每次滚动的像素 /// </summary> public int offsetY = 3; /// <summary> /// 滚动的间隔时间毫秒为单位 /// </summary> public int interval = 10; /// <summary> /// 当前页数 /// </summary> public int page = 1; /// <summary> /// 是否自动滚动 /// </summary> public bool autoScroll = false; /// <summary> /// 加载页面 /// </summary> public void openUrl() { webBrowser1.Navigate(string.Format(url, page)); } /// <summary> /// 开始滚屏 /// </summary> public void startScroll() { webBrowser1.Navigate(string.Format(@"javascript: (function() {{ var body = document.documentElement && document.compatMode == 'CSS1Compat' ? document.documentElement : document.body; clearInterval(window.timerAutoScroll); window.timerAutoScroll = setInterval(function() {{ scrollBy(0, {0}); if (body.scrollHeight <= body.clientHeight + body.scrollTop) {{ clearInterval(window.timerAutoScroll); location = '{2}' }} }}, {1}); }})();", offsetY, interval, string.Format(url, page)) ); } /// <summary> /// 停止滚屏 /// </summary> public void stopScroll() { webBrowser1.Navigate(@"javascript:clearInterval(window.timerAutoScroll);"); } private void Form1_Load(object sender, EventArgs e) { openUrl(); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!autoScroll || string.Compare(e.Url.ToString(), string.Format(url, page), true) != 0) return; // 不滚屏或者加载完成的不是当前页面 page++; // 下一页 startScroll(); } private void buttonStart_Click(object sender, EventArgs e) { if (autoScroll) return; autoScroll = true; startScroll(); } private void buttonStop_Click(object sender, EventArgs e) { if (!autoScroll) return; autoScroll = false; stopScroll(); } } }- 已标记为答案 yzjiujian 2010年4月7日 2:48
全部回复
-
你好!
你可以尝试设置这个属性:webbrowser1.document.body.scrolltop来自动滚动!
周雪峰
一开始以为不行,后来发现有的页可以,有的页不行。后来查了一下,原来和
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">有关
原来:
页面具有 DTD(或者说指定了 DOCTYPE)时,使用 document.documentElement。
页面不具有 DTD(或者说没有指定了 DOCTYPE)时,使用 document.body。
详细出处参考:http://www.jb51.net/article/21168.htm但是只有webBrowser1.Document.Body.ScrollTop属性,没有其他的了?如何解决?
- 已编辑 yzjiujian 2010年4月6日 7:59 增加修改
-
- csdn上某牛人的回帖
- C# code
.... { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 访问链接 /// </summary> public const string url = "http://baike.baidu.com/view/{0}.htm"; /// <summary> /// 每次滚动的像素 /// </summary> public int offsetY = 3; /// <summary> /// 滚动的间隔时间毫秒为单位 /// </summary> public int interval = 10; /// <summary> /// 当前页数 /// </summary> public int page = 1; /// <summary> /// 是否自动滚动 /// </summary> public bool autoScroll = false; /// <summary> /// 加载页面 /// </summary> public void openUrl() { webBrowser1.Navigate(string.Format(url, page)); } /// <summary> /// 开始滚屏 /// </summary> public void startScroll() { webBrowser1.Navigate(string.Format(@"javascript: (function() {{ var body = document.documentElement && document.compatMode == 'CSS1Compat' ? document.documentElement : document.body; clearInterval(window.timerAutoScroll); window.timerAutoScroll = setInterval(function() {{ scrollBy(0, {0}); if (body.scrollHeight <= body.clientHeight + body.scrollTop) {{ clearInterval(window.timerAutoScroll); location = '{2}' }} }}, {1}); }})();", offsetY, interval, string.Format(url, page)) ); } /// <summary> /// 停止滚屏 /// </summary> public void stopScroll() { webBrowser1.Navigate(@"javascript:clearInterval(window.timerAutoScroll);"); } private void Form1_Load(object sender, EventArgs e) { openUrl(); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!autoScroll || string.Compare(e.Url.ToString(), string.Format(url, page), true) != 0) return; // 不滚屏或者加载完成的不是当前页面 page++; // 下一页 startScroll(); } private void buttonStart_Click(object sender, EventArgs e) { if (autoScroll) return; autoScroll = true; startScroll(); } private void buttonStop_Click(object sender, EventArgs e) { if (!autoScroll) return; autoScroll = false; stopScroll(); } } }- 已标记为答案 yzjiujian 2010年4月7日 2:48