如何从浏览器控件获取 onclick 中的实际 JavaScript 值?

2023-11-22

我正在寻找一种方法来获取 onclick 内部定义的 JavaScript 代码。 我正在使用 .NET 2.0 C# Visual Studio 2005。

Example:

<span id="foo" onclick+"window.location.href='someURL'>click here</span>

我的目标是得到字符串“window.location.href='someURL'”.

设想:

用户单击网页元素,例如上面显示的 WebBrowser 控件内部的标签。然后点击的标签被引用到HtmlElement object.

然后在 WebBrowser 控件中调用HtmlElement object's getAttribute("onclick"),它只是给了我“系统.__ComObject”。

我搜索了如何处理它,然后发现它可以被转换然后获取值。

if (tag.GetAttribute("onclick").Equals("System.__ComObject"))
{
    Console.WriteLine("dom elem  >>>>>>>>>>> " + tag.DomElement.ToString());
    mshtml.HTMLSpanElementClass span = (mshtml.HTMLSpanElementClass)tag.DomElement;

    Console.WriteLine("js value ===>" + span.onclick);
}

Output:

dom elem  >>>>>>>>>>> mshtml.HTMLSpanElementClass
js value ===> System.__ComObject

如图所示,span.onclick 仍然给我 System.__ComObject,我做错了什么?

In 为什么 HtmlElement 的 GetAttribute() 方法返回“mshtml.HTMLInputElementClass”而不是属性的值?这家伙说这对他的情况有效,我已经遵循了,但我的有点不起作用......

UPDATE

研究、研究……

我可以将引用 VisualBasic.dll 添加到我的 C# 项目中,然后调用该方法来找出这个 System.__ComObject 到底是谁。

Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(span.onclick));

Output:

JScriptTypeInfo

看起来这是一个 JScript 类型...我如何访问这个对象?

更多详情

以上描述是基于我当前的项目。该项目旨在创建类似 Selenium IDE 的东西。它使用 WebBrowser 控件代替。

Selenium IDE 创建 3 种不同的东西来记录 Web 文档中的元素。

1. actionType
2. xpath
3. value

例如,

type, //input[@id=foo], "hello world"
clickAndWait, //link=login, ""

Selenium IDE 识别页面加载,因此它会更改 actionType"click" and "clickAndWait"。我的情况,我想让它变得简单。

如果我单击该元素并且如果它是anchor tag或者有页面加载类型的 javascript 例如onclick=window.location.href='blah'然后我想将 actionType 设置为"clickAndWait".


您可以通过多种方式做到这一点。

  1. DOM 中有一个 Event 对象,它将为您提供有关哪个元素生成此事件的信息。
  2. 你可以看这里,http://msdn.microsoft.com/en-us/library/ff975965%28v=VS.85%29.aspx
  3. 这个很好,您可以轻松使用它,您将获得事件对象作为方法参数,您可以调查参数以找出事件的来源。http://support.microsoft.com/kb/312777

另一种选择是使用自定义导航 URL 并对其进行操作

  1. 覆盖 BeforeNavigate 事件
  2. 检查导航 url 是否包含“mycommand:click”或“mycommand:clickandwait” 3. 如果包含其中任何一项,则将 cancel 设置为 true。 (这将停止浏览器导航)。
  3. 然后,您可以从 C# 代码导航您的网络浏览器代码,并将 cancel 传递为 true。

另一种替代方法是使用外部对象,WebBrowser 允许您设置脚本对象您可以在 HTML 的 Javascript 中访问它。

.NET 2.0 中的 ObjectForScripting

[ComVisible(true)]
public class MyClass
{
   // can be called from JavaScript
   public void ShowMessageBox(string msg){
       MessageBox.Show(msg);
   }
}

myBrowser.ObjectForScripting = new MyClass(); 
// or you can reuse instance of MyClass

并且您可以致电,

window.external.ShowMessageBox("This was called from JavaScript");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从浏览器控件获取 onclick 中的实际 JavaScript 值? 的相关文章

随机推荐