C# 给网页IFRAME中控件赋值

microsoft_chian 2009-05-20 11:54:16
页面1片段:[/color[color=#FF6600]]<IFRAME class=Cmp_editor id=editor
style="HEIGHT: 320px" tabIndex=5 src="files/editor.htm" frameBorder=0
scrolling=no> </IFRAME>
页面2片段:[editor.htm][/color[color=#FF6600]]<TEXTAREA id=dvtext style="BORDER-RIGHT: 0px; PADDING-RIGHT: 4px; BORDER-TOP: 0px; DISPLAY: none; PADDING-LEFT: 8px; FONT-SIZE: 14px; PADDING-BOTTOM: 8px; BORDER-LEFT: 0px; WIDTH: 100%; LINE-HEIGHT: 170%; PADDING-TOP: 7px; BORDER-BOTTOM: 0px; FONT-FAMILY: Arial, Helvetica, sans-serif; HEIGHT: 88%; WORD-WRAP: break-word"> </TEXTAREA>
?怎样才能用C#在页面1中,给[editor.htm]中的<TEXTAREA id=dvtext >赋值?

注:用webbrowser打开页面1的,我有测试过:
1)webBrowser1.Document.Forms(这个的问题是不含IFRAME,只含有FORM)
2)webBrowser1.Document.All[i](这个可以找到IFRAME,但不能进一步遍历IFRAME中的控件,即:当webBrowser1.Document.All[i]所对应对象为:IFRAME时,webBrowser1.Document.All[i].All.Count = 0,根本不能遍历)

?怎样才能用C#通过webBrowser1在页面1中,给[editor.htm]中的<TEXTAREA id=dvtext >赋值?
请高人指点,谢谢!
...全文
930 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alex_sen 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shrinerain 的回复:]
对于跨域的frame, 会有安全限制不能获取, 解决方案网上到处都是.                 
[/Quote]

我想访问跨域的frame里面的内容已经设置里面表单的值,网上找了几天都没有找到解决方案,shrinerain能指引一下吗,不是跨域的话就可以,跨域就拒绝访问了。
shrinerain 2009-05-23
  • 打赏
  • 举报
回复
你看下我发的程序的源代码就知道了. 既然你懒得看...

对于frame, 你需要通过父页面的.frames来获取子页面的document, 然后执行document.getElementById之类.



//获取父页面框架集合.
IHTMLFramesCollection2 frames = parentDocument.frames;
for (int i = 0; i < frames.length; i++)
{
object index = i;
IHTMLWindow2 frame = frames.item(ref index) as IHTMLWindow2;
IHTMLDocument2 frameDoc = frame.document as IHTMLDocument2
//现在你可以通过frameDoc获取子页面控件.
}


对于跨域的frame, 会有安全限制不能获取, 解决方案网上到处都是.
microsoft_chian 2009-05-23
  • 打赏
  • 举报
回复
谢谢你了
用你的方法,我试过只能获取父窗品中的控件,而且类似于:
<INPUT class="Btn BtnNml ImpBtn" onmousedown="this.className='Btn BtnHv BtnDw ImpBtn'" hideFocus onmouseover="this.className='Btn BtnHv ImpBtn'" style="FLOAT: none" onclick="MM['compose'].doAction('deliver');" onmouseout="this.className='Btn BtnNml ImpBtn'" type=button value="发 送">
这样的控件即使在父窗品,也好像获取不了

用你的方法,获取子窗口中控件:
<TEXTAREA id=dvtext style="border:0px none; PADDING-RIGHT: 4px; DISPLAY: none; PADDING-LEFT: 8px; FONT-SIZE: 14px; PADDING-BOTTOM: 8px; WIDTH: 278; LINE-HEIGHT: 170%; PADDING-TOP: 7px; FONT-FAMILY: Arial, Helvetica, sans-serif; HEIGHT: 281; WORD-WRAP: break-word"></TEXTAREA>
也失败了,能在详细给予指导吗?谢!!!
microsoft_chian 2009-05-21
  • 打赏
  • 举报
回复
页面1是editor.htm的父窗体
shrinerain 2009-05-21
  • 打赏
  • 举报
回复
从http://code.google.com/p/autotester/downloads/list 下载AutoTesterLib.dll

建立一个C# 命令行工程,添加AutoTesterLib.dll的引用.

编写以下代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

using Shrinerain.AutoTester.Core;
using Shrinerain.AutoTester.HTMLUtility;

namespace attest
{
class Program
{
[STAThread]
static void Main(string[] args)
{
TestSession ts = new HTMLTestSession();
ts.Browser.Start("http://localhost:8080/mockup/event/page1.htm"); //这里替换为你页面1的url.
ts.Objects.TextBox("id=dvtext").Input("xxx");
}
}
}


所有源代码都可以从http://code.google.com/p/autotester/source/checkout下载.
wangxinli_nissan 2009-05-21
  • 打赏
  • 举报
回复
如果editor.htm是页面1的父窗体即通过editor.htm的按钮或超链接等方式弹出页面1的话赋值方式如下:
opener.document.all.dvtext.value=<赋值>

110,567

社区成员

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

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

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