当前位置:编程学习 > C#/ASP.NET >>

WebBrowser如何插入图片?

如题。在Winform里面把WebBrowser打开了编辑模式,然后设置一个打开图片的对话框,选取图片之后再AppendChild之后却发现图片的地址开头自动加入:“about:”字样,导致图片地址获取失败。我是想将图片弄成相对地址的形式存在html里面!

打开图片相关代码如下:

OpenFileDialog openfilejpg = new OpenFileDialog();
            openfilejpg.Filter = "jpg图片(*.jpg)|*.jpg|gif图片(*.gif)|*.gif";
            openfilejpg.FilterIndex = 0;
            openfilejpg.RestoreDirectory = true;
            openfilejpg.Multiselect = false;
            if (openfilejpg.ShowDialog() == DialogResult.OK && openfilejpg.FileName.Length > 0)
            {                
                filepath = openfilejpg.FileName;
                filename = Path.GetFileName(openfilejpg.FileName);

                //复制图片到程序目录下的image文件夹
                File.Copy(filepath, @"image/" + filename, true);         
                HtmlElement el = this.webBrowserBody.Document.CreateElement("DIV");
                el.InnerHtml = "<img src=image\\" + filename + "></img>";

                MessageBox.Show(el.InnerHtml);
                this.webBrowserBody.Document.Body.AppendChild(el);
            }

messagebox  show出来的结果如下所示:



为何会自动添加“about:”这个啊??各位高手给解答一下谢谢!!

PS:还有一个方法,就是:

webBrowserBody.Document.ExecCommand("InsertImage", true, null);

虽然这样也可以添加图片,可是我怎么获取这个图片地址呢?我怎么把这图片修改为相对路径呢?

各位高手给解答一下谢谢!!
--------------------编程问答-------------------- 没人回我? --------------------编程问答-------------------- 你这样写它认为是一个相对路径,我想你WebBrower没有加载任何页面吧?如果你加载其它页面,就不是about了,就应该是当前加载页的路径了。你看看是不是! --------------------编程问答-------------------- 我把你的修改后的

 private void button1_Click(object sender, EventArgs e)
        {
            string filepath = "";
            string filename = "";
            OpenFileDialog openfilejpg = new OpenFileDialog();
            openfilejpg.Filter = "jpg图片(*.jpg)|*.jpg|gif图片(*.gif)|*.gif";
            openfilejpg.FilterIndex = 0;
            openfilejpg.RestoreDirectory = true;
            openfilejpg.Multiselect = false;
            if (openfilejpg.ShowDialog() == DialogResult.OK && openfilejpg.FileName.Length > 0)
            {
                filepath = openfilejpg.FileName;
                filename = Path.GetFileName(openfilejpg.FileName);

                //复制图片到程序目录下的image文件夹
                //File.Copy(filepath, "image/" + filename, true);
                HtmlElement el = this.webBrowser1.Document.CreateElement("DIV");
               // el.InnerHtml = "<input type='button' value='test'/>";
                el.InnerHtml = "<img src='" + filepath + "'></img>";
                
               // MessageBox.Show(el.InnerHtml);
                this.webBrowser1.Document.Body.AppendChild(el);

            }
        }
--------------------编程问答--------------------
引用 3 楼 wzp144650 的回复:
我把你的修改后的

C# code

 private void button1_Click(object sender, EventArgs e)
        {
            string filepath = "";
            string filename = "";
            OpenFileDialog openfilejpg ……


非常感谢你的回复,你这样是没有错。假如我按你方法添加图片之后保存网页内容,然后我把程序移动到别的电脑用的话,那网页内容里面图片的地址还是我原来电脑的图片地址啊,在新电脑里显示的话就是一个叉了...
所以我要做一个相对地址,存到exe程序同文件夹下的image文件夹里,网页内容保存的也是这个image里面的地址。这样我image跟着程序走就不会出现地址不存在了... --------------------编程问答--------------------
引用 2 楼 wzp144650 的回复:
你这样写它认为是一个相对路径,我想你WebBrower没有加载任何页面吧?如果你加载其它页面,就不是about了,就应该是当前加载页的路径了。你看看是不是!


你好,能再说详细一点吗?谢谢!! --------------------编程问答-------------------- 不知道顶一下 --------------------编程问答--------------------
引用 5 楼 mengxin523 的回复:
引用 2 楼 wzp144650 的回复:
你这样写它认为是一个相对路径,我想你WebBrower没有加载任何页面吧?如果你加载其它页面,就不是about了,就应该是当前加载页的路径了。你看看是不是!


你好,能再说详细一点吗?谢谢!!


例如: WebBrower.Navigate("http://www.google.com")

写在Load里

你再看看会是什么样的 --------------------编程问答--------------------  File.Copy(filepath,AppDomain.CurrentDomain.BaseDirectory +filename, true); --------------------编程问答--------------------
引用 7 楼 wzp144650 的回复:
引用 5 楼 mengxin523 的回复:

引用 2 楼 wzp144650 的回复:
你这样写它认为是一个相对路径,我想你WebBrower没有加载任何页面吧?如果你加载其它页面,就不是about了,就应该是当前加载页的路径了。你看看是不是!


你好,能再说详细一点吗?谢谢!!


例如: WebBrower.Navigate("http://www.google.com……


这样就载入了谷歌的首页了,我要插入图片貌似也插不了。同时,我在程序目录放置一个index.html,程序加载的生活载入它,然后我插入图片也不行... --------------------编程问答--------------------
引用 8 楼 wzp144650 的回复:
File.Copy(filepath,AppDomain.CurrentDomain.BaseDirectory +filename, true);


这个图片复制的方式你放心,我可以在image里面都找到对应的图片,说明图片复制是OK的!! --------------------编程问答-------------------- 你把要显示的图先上传到程序中,在把其相对路径给要显示的 filepath 
 el.InnerHtml = "<img src='" + filepath + "'></img>";
--------------------编程问答-------------------- 用字符串操作把内个头截掉  那是WebBrowser的问题 --------------------编程问答--------------------
引用 12 楼 foxdave 的回复:
用字符串操作把内个头截掉 那是WebBrowser的问题


你是说把about给replace掉吗??我试过了,不行呀 --------------------编程问答--------------------
引用 11 楼 dgq3719091 的回复:
你把要显示的图先上传到程序中,在把其相对路径给要显示的 filepath 
 el.InnerHtml = "<img src='" + filepath + "'></img>";


这个没问题啊,我即使把相对路径写入到filepath 也不行啊 --------------------编程问答-------------------- 支持一个! --------------------编程问答--------------------
引用 10 楼 mengxin523 的回复:
引用 8 楼 wzp144650 的回复:
File.Copy(filepath,AppDomain.CurrentDomain.BaseDirectory +filename, true);


这个图片复制的方式你放心,我可以在image里面都找到对应的图片,说明图片复制是OK的!!

晕!还没解决?

不是给你改过了?3楼的时候已经可以显示图片了吧?那加上10楼的,不就是可以移到另一个台机子上用了? --------------------编程问答--------------------

string filename = "";
            string filepath = "";
            
            OpenFileDialog openfilejpg = new OpenFileDialog();
            openfilejpg.Filter = "jpg图片(*.jpg)|*.jpg|gif图片(*.gif)|*.gif";
            openfilejpg.FilterIndex = 0;
            openfilejpg.RestoreDirectory = true;
            openfilejpg.Multiselect = false;
            if (openfilejpg.ShowDialog() == DialogResult.OK && openfilejpg.FileName.Length > 0)
            {
                filepath = openfilejpg.FileName;
                filename = Path.GetFileName(openfilejpg.FileName);
               
                //复制图片到程序目录下的image文件夹
                File.Copy(filepath,@"image/" +filename, true);
                HtmlElement el = this.webBrowser1.Document.CreateElement("DIV");
                el.InnerHtml = "<img src='" + filepath + "'></img>";
            
                this.webBrowser1.Document.Body.AppendChild(el);

            }
        }



--------------------编程问答--------------------
引用 16 楼 wzp144650 的回复:
引用 10 楼 mengxin523 的回复:

引用 8 楼 wzp144650 的回复:
File.Copy(filepath,AppDomain.CurrentDomain.BaseDirectory +filename, true);


这个图片复制的方式你放心,我可以在image里面都找到对应的图片,说明图片复制是OK的!!

晕!还没解决?

不是给你改过了?3楼……



还没解决啊,这样能行吗?大哥能不能贴相应的完整的code出来啊,我很急,很感谢你!! --------------------编程问答--------------------
引用 17 楼 wzp144650 的回复:
C# code

string filename = "";
            string filepath = "";
            
            OpenFileDialog openfilejpg = new OpenFileDialog();
            openfilejpg.Filter = "jpg图片(*.jpg)|*.jpg|……


你只是把filename改为filepath,html里面img的src还是绝对地址~!如果转到别的机器上面就显示不了图片了...我希望src里面放的是image里面图片的地址! --------------------编程问答--------------------
引用 18 楼 mengxin523 的回复:
还没解决啊,这样能行吗?大哥能不能贴相应的完整的code出来啊,我很急,很感谢你!!


17楼不就是嘛。。。。 --------------------编程问答--------------------
引用 20 楼 wzp144650 的回复:
引用 18 楼 mengxin523 的回复:

还没解决啊,这样能行吗?大哥能不能贴相应的完整的code出来啊,我很急,很感谢你!!


17楼不就是嘛。。。。


你查看一下webBrowserBody.DocumentText就知道里面src的地址还是绝对地址啊... --------------------编程问答-------------------- 有人吗? --------------------编程问答-------------------- 有人吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,