在下面程序中Form_Load事件中我加载的是这个网页啊,然后调用的时候Call EnumFrames(WebBrowser1) 这样一来IframeIE(j).Document.getElementsByName("bh")(0).Value = "班级"你要在指定的网页才可以执行这句话啊,这里有问题? 然后IframeIE(j)当j等于1时难道不是代表网页中的Iframe(1)?如果是应该就没错啊 另外的话一个框架的话问题已经解决可以执行赋值操作,只是我不能得到单个框架中的文字不知道咋回事 这里由于一时找不到框架嵌套的网页只是用这个网页举个例而已 Private Sub Command1_Click() Call EnumFrames(WebBrowser1)End SubPrivate Sub Form_Load()WebBrowser1.Navigate "http://jwglxt.enxnc.com.cn/jwc_index.html" End Sub
If Err.Number = 0 Then 这个if语句拿了应该就行了,这个错误号一旦为0下面都是0了,原来程序有个bug,应该在下次循环时用Err.Clear语句清除下。If Err.Number = 0 Then '检查错误号,0的话表示未发生错误,往下操作 '将框架页面依次赋值到IframeIE数组中 ReDim Preserve IframeIE(0 To j) '重定义数组IframeIE,往后每个数组长度加1 Set IframeIE(j) = pUnk '将当前保存在pUnk中的frame框架放到刚追加的数组IframeIE(j) j = j + 1 'frame个数加1,如果下面继续存在frame的话用于IframeIE数组重定义用 else Err.Clear End If
Private IframeIE() As Object '这里报错是否应为Private IframeIE() As SHDocVwCtl.WebBrowser'枚举框架,参数WB是一个webbrowser控件的名称,其中承载着我们要分析的页面 Sub EnumFrames(ByVal WB As WebBrowser) 'sub过程声明 Dim j As Integer '用于记录frames的个数,方便下面的redim存到IframeIE中 Dim pContainer As olelib.IOleContainer '库的内部对象,根据下面的来看是用来存放webbrowser的document对象的 Dim pEnumerator As olelib.IEnumUnknown '库的内部对象,用于检测是否存在下一个frame了,有的话就存到变量pUnk中 Dim pUnk As olelib.IUnknown '库的内部对象,基本就是指网页中的frame对象,相当于一个webbrowser Dim pBrowser As SHDocVwCtl.WebBrowser_V1 '获得页面的Document接口,然后我们就可以对其为所欲为了 Set pContainer = WB.object.Document '将webbrowser的document对象装载到pContainer '很奇怪,有时候上面这段对象赋值出错,用下面这句就没有问题了 ' Set pContainer = WB.Document If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then '用库对象的内部方法"EnumObjects"检测是否存在框架页,并将枚举结果存放到pEnumerator中 Set pContainer = Nothing '对象pContainer用不到了,清空 Do While pEnumerator.Next(1, pUnk) = 0 '一个个枚举,如果结果大于0就表示有结果,开始进行do循环体内操作 On Error Resume Next '忽略错误 If Err.Number = 0 Then '检查错误号,0的话表示未发生错误,往下操作 '将框架页面依次赋值到IframeIE数组中 ReDim Preserve IframeIE(0 To j) '重定义数组IframeIE,往后每个数组长度加1 Set pBrowser = pUnk Debug.Print "Frame: " & pBrowser.LocationURL Set IframeIE(j) = pBrowser '将当前保存在pUnk中的frame框架放到刚追加的数组IframeIE(j) IframeIE(j).Document.getElementsByName("bh")(0).Value = "班级" j = j + 1 'frame个数加1,如果下面继续存在frame的话用于IframeIE数组重定义用 Else Err.Clear End If Loop Set pEnumerator = Nothing '清空对象 End If End SubPrivate Sub Command1_Click() Call EnumFrames(WebBrowser1) End SubPrivate Sub Form_Load() WebBrowser1.Navigate "http://jwglxt.enxnc.com.cn/jwc_index.html" End Sub 好像必须要通过pBrowser来传递下。以上代码测试通过。不知道你怎么调试的。“我把每行代码都设置了断点,发现每行代码都运行”要看各个变量的值,另外注意去掉on error 的语句再调试
这样一来IframeIE(j).Document.getElementsByName("bh")(0).Value = "班级"你要在指定的网页才可以执行这句话啊,这里有问题?
然后IframeIE(j)当j等于1时难道不是代表网页中的Iframe(1)?如果是应该就没错啊
另外的话一个框架的话问题已经解决可以执行赋值操作,只是我不能得到单个框架中的文字不知道咋回事
这里由于一时找不到框架嵌套的网页只是用这个网页举个例而已
Private Sub Command1_Click()
Call EnumFrames(WebBrowser1)End SubPrivate Sub Form_Load()WebBrowser1.Navigate "http://jwglxt.enxnc.com.cn/jwc_index.html"
End Sub
我把每行代码都设置了断点,发现每行代码都运行了,可是结果就是没显示啊
偶技术差了,实在搞不懂
'将框架页面依次赋值到IframeIE数组中
ReDim Preserve IframeIE(0 To j) '重定义数组IframeIE,往后每个数组长度加1
Set IframeIE(j) = pUnk '将当前保存在pUnk中的frame框架放到刚追加的数组IframeIE(j)
j = j + 1 'frame个数加1,如果下面继续存在frame的话用于IframeIE数组重定义用
else
Err.Clear
End If
Private IframeIE() As Object '这里报错是否应为Private IframeIE() As SHDocVwCtl.WebBrowser'枚举框架,参数WB是一个webbrowser控件的名称,其中承载着我们要分析的页面
Sub EnumFrames(ByVal WB As WebBrowser) 'sub过程声明
Dim j As Integer '用于记录frames的个数,方便下面的redim存到IframeIE中
Dim pContainer As olelib.IOleContainer '库的内部对象,根据下面的来看是用来存放webbrowser的document对象的
Dim pEnumerator As olelib.IEnumUnknown '库的内部对象,用于检测是否存在下一个frame了,有的话就存到变量pUnk中
Dim pUnk As olelib.IUnknown '库的内部对象,基本就是指网页中的frame对象,相当于一个webbrowser
Dim pBrowser As SHDocVwCtl.WebBrowser_V1
'获得页面的Document接口,然后我们就可以对其为所欲为了
Set pContainer = WB.object.Document '将webbrowser的document对象装载到pContainer
'很奇怪,有时候上面这段对象赋值出错,用下面这句就没有问题了
' Set pContainer = WB.Document
If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then '用库对象的内部方法"EnumObjects"检测是否存在框架页,并将枚举结果存放到pEnumerator中
Set pContainer = Nothing '对象pContainer用不到了,清空
Do While pEnumerator.Next(1, pUnk) = 0 '一个个枚举,如果结果大于0就表示有结果,开始进行do循环体内操作
On Error Resume Next '忽略错误
If Err.Number = 0 Then '检查错误号,0的话表示未发生错误,往下操作
'将框架页面依次赋值到IframeIE数组中
ReDim Preserve IframeIE(0 To j) '重定义数组IframeIE,往后每个数组长度加1
Set pBrowser = pUnk
Debug.Print "Frame: " & pBrowser.LocationURL
Set IframeIE(j) = pBrowser '将当前保存在pUnk中的frame框架放到刚追加的数组IframeIE(j)
IframeIE(j).Document.getElementsByName("bh")(0).Value = "班级"
j = j + 1 'frame个数加1,如果下面继续存在frame的话用于IframeIE数组重定义用
Else
Err.Clear
End If
Loop
Set pEnumerator = Nothing '清空对象
End If
End SubPrivate Sub Command1_Click()
Call EnumFrames(WebBrowser1)
End SubPrivate Sub Form_Load()
WebBrowser1.Navigate "http://jwglxt.enxnc.com.cn/jwc_index.html"
End Sub
好像必须要通过pBrowser来传递下。以上代码测试通过。不知道你怎么调试的。“我把每行代码都设置了断点,发现每行代码都运行”要看各个变量的值,另外注意去掉on error 的语句再调试
忘记了代码框里是不能标记颜色的了,自己把颜色标记去掉吧
这样修改后是否还能跨域操作
Set pBrowser = pUnk
Set getFrames = pBrowser
加了那几句可以跨域,不加反倒不行了,你在一楼的代码反正没法通过,不知道最初的作者是怎么做的,你可以联系他看看。
百度知道的那个没有frame当然不行了。相关资料参考下面的帖子,不懂的多在网上搜索搜索,要掌握学习的方法:
http://topic.csdn.net/u/20101107/18/341a244e-b941-4ddc-a4e8-484fe43486b2.html
你能给我个示例源码吗做好的运行可以看到效果的这样应该理解的快些
我一时也找不到需要跨域才能操作的网页
这样一来没法真正体会它
http://topic.csdn.net/u/20101107/18/341a244e-b941-4ddc-a4e8-484fe43486b2.html
以及这个:
http://topic.csdn.net/u/20100826/21/57113d41-6a6f-4b97-b20d-70bf26f55b7e.html
现在知道什么叫跨域了
这个问题搞定
比如主网页在 http://www.abc.com/ 里面有一个iframe是加载的 http://www.def.com/ 的附页面
并且在附页面http://www.def.com/里有文本框什么的,你要在主网页里操作附页面里的文本框这时就要用到跨域操作了.
不瞒你说先前是不知道跨域访问是什么意思所以一片茫然啊
现在清楚了
累了你了呵呵