c# - 调用子 <frame> 中指定的 JavaScript 函数

标签 c# javascript html dom

父页面的常用HTML结构(index.html):

<html>
<head>
<title>test title</title>
</head>
    <frameset cols="150,*">
        <frame name="left" src="testleft.html">
        </frame>
        <frame name="right" src="testright.html">
        </frame>
  </frameset>
 </html>

子页面的常用HTML结构(teSTLeft.html):

<html>
    <head>
        <script>
            function proc1(frm) {
                alert("called proc1");
                frm.setAttribute("id", "change!!");
            }
        </script>
    </head>
    <body>
        <p>This is testpage.</p>
        <form name="TestFormName" action="get" id="TestFormId">
            <input type="text" value="TextValueEmpty" />
        </form>
    </body>
</html>

我想使用 C# 在 teSTLeft.html 上调用 proc1()。我尝试使用 WebBrowser.Document.InvokeScript(),但它无法调用 proc1()。我该怎么做?

最佳答案

WebBrowser.Document.InvokeScript() 只能用于调用 JScript 函数,但由于您的函数更深,我们必须创建一个小的“函数”来访问您的函数。 WebBrowser 控件没有任何方法可以做到这一点,因此我们必须使用“hack”:

我们将导航到 javascript:code 以执行我们的代码。为了到达我们的函数 proc1,我们必须使用这个小片段:top.frames[0].proc1()

因此,为了将它们放在一起,我们必须编写一行简单的 C# 代码:

WebBrowser.Navigate("Javascript:top.frames[0].proc1()");

关于c# - 调用子 <frame> 中指定的 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17631533/

相关文章:

c# - 在 C# 中用多个 Char 分割字符串

javascript - 移动设备上没有调整大小事件

html - 无论我做什么,Div 都不会改变位置

javascript - 如何为使用 Javascript 显示的内容创建过滤器?

javascript - 在 Javascript 中将对象键从一个对象映射/过滤到一个新对象

html - 为什么 border-spacing 不在我的 TABLE 元素周围添加填充?

c# - 获取可空变量的值或空值

c# - 带@的StringBuilder AppendFormat

c# - 如何反射(reflect)应用于枚举类型本身的自定义属性

javascript - getElementById() 和 getElementByName() 对于 IE9 是否相同?