用js遍历当前窗体的所有子窗体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用js遍历当前窗体的所有子窗体相关的知识,希望对你有一定的参考价值。

参考技术A

frameset

<script type="text/javascript">
window.onload = function()
var frms = window.frames;
for(var i = 0; i < frms.length; i++)
// Window, Window, Window
console.log(frms[i]);

;
</script>


<frameset cols="20%,400,*">
<frame src="a.htm">
<frame src="b.htm">
<frame src="c.htm">
</frameset>


iframe

<script type="text/javascript">
window.onload = function()
var iframes = document.getElementsByTagName("iframe");
for(var i = 0; i < iframes.length; i++)
// Window, Window, Window
console.log(iframes[i].contentWindow);

;
</script>


<iframe src="a.html"></iframe>
<iframe src="b.html"></iframe>
<iframe src="c.html"></iframe>

追问

谢谢你的答案,我提前已取出来,你能告诉我怎样取得当前窗口的顶级窗口;遍历顶级窗口的所有子窗口

追答

self = window = JavaScript 执行的当前窗口
parent = 当前窗口的父级窗口
top = 顶级窗口

所以你需要的是 window.top,然后再用上面的代码遍历它的所有子窗口

追问

获取的窗口有content和其他窗口,但没有treecontent,pagecontent窗口,我感觉没取完

追答

截图失效,看不到

有的页面里面会加入防 frame 代码,例如

if(self != parent)
parent.location = self.location;


这样父层里面原来的 frame 就没有了,等于少了一个 window

c# 用 FindWindowEx 获取子窗体时 出异常

//查找父级窗体
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
//查找子窗体
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

以下是调用。

//网页弹出消息

IntPtr maindHwnd = FindWindow(null, "来自网页的消息"); //获得 弹出窗口 句柄
if (maindHwnd != IntPtr.Zero)


IntPtr childHwnd = FindWindowEx(maindHwnd, new IntPtr(0), "Button", "确定"); //获得按钮的句柄


else

richTextBox1.Text += "没有找到窗口\n";


I当程序执行到:
ntPtr childHwnd = FindWindowEx(maindHwnd, new IntPtr(0), "Button", "确定"); //获得按钮的句柄
会出现如下异常:
对 PInvoke 函数“WindowsFormsApplication5!WindowsFormsApplication5.Form3::FindWindowEx”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

请高人予以指点。

参考技术A 哈哈,你有个地方写错了
//查找子窗体
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("user32.dll", EntryPoint = "FindWindow")]应该把EntryPoint = "FindWindow"改为EntryPoint = "FindWindowEx",或者直接 [DllImport("user32.dll")]追问

万分感谢…一直没看声明的部分
我改过来后,能正常运行了,可是依然获取不到子窗体,你能指点一下吗?
如果解决问题,我再给你加分。
网页弹出窗如下:

我想获取 子窗体的句柄,比如“Web message.”窗体的句柄,若何操作?
谢谢

追答

这个还没试过,你用FindWindow(null, "来自网页的消息")获取句柄试试,不行的话用SPy++获取这个窗口的类名称,然后代替null
good luck

参考技术B
else /*正常删除子串的情况*/

j=i;
while(S.ch[j-1+len]!='\0') /*把要删除子串后的字符串前移len个位置*/

S.ch[j-1]=S.ch[j-1+len];
j++;

S.len=S.len-len; /*修改字符串长度*/
S.ch[S.len]='\0'; /*存放字符串结束标志*/本回答被提问者采纳
参考技术C IntPtr.Zero 与 new IntPtr(0)一样吗?

以上是关于用js遍历当前窗体的所有子窗体的主要内容,如果未能解决你的问题,请参考以下文章

在C#winform中如何遍历子窗体中有容器中的所有的控件

如何遍历winform窗体中的所有控件

如何遍历所有子窗体 MS Access VBA

子窗体中的子窗体控件

winform 父窗体如何获取子窗体控件的值

c#用递归遍历整个窗体上的子控件