在 C# Webbrowser 控件 WPF 中从 Javascript 获取返回值
Posted
技术标签:
【中文标题】在 C# Webbrowser 控件 WPF 中从 Javascript 获取返回值【英文标题】:Getting return value from Javascript in C# Webbrowser control WPF 【发布时间】:2012-10-26 13:26:48 【问题描述】:我在 C# (System.Windows.Controls.WebBrowser)
中将 javascript 注入到 WebBrowser 控件中
这样,<C#>
IhtmlDocument2 webdoc = (IHTMLDocument2)webBrowser1.Document;
string var = File.ReadAllText("C:/.../Resources/script.txt");
object retVal = webdoc.parentWindow.execScript(var, "Jscript");
JavaScript 文件 script.txt 是,
var headID = document.getElementsByTagName('head')[0];
var newScript = document.createElement('script');
newScript.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js'
headID.appendChild(newScript)
$('body').bind('click',function(e)
var domsArray = [];
for (var i = 0; i < 15; i++)
for (var j = 0; j < 15; j++)
if (document.elementFromPoint(e.clientX+i, e.clientY+j) && (jQuery.inArray(document.elementFromPoint(e.clientX+i, e.clientY+j), domsArray) < 0))
domsArray.push(document.elementFromPoint(e.clientX+i, e.clientY+j));
if (document.elementFromPoint(e.clientX-i, e.clientY+j) && (jQuery.inArray(document.elementFromPoint(e.clientX-i, e.clientY+j), domsArray) < 0))
domsArray.push(document.elementFromPoint(e.clientX-i, e.clientY+j));
if (document.elementFromPoint(e.clientX+i, e.clientY-j) && (jQuery.inArray(document.elementFromPoint(e.clientX+i, e.clientY-j), domsArray) < 0))
domsArray.push(document.elementFromPoint(e.clientX+i, e.clientY-j));
if (document.elementFromPoint(e.clientX-i, e.clientY-j) && (jQuery.inArray(document.elementFromPoint(e.clientX-i, e.clientY-j), domsArray) < 0))
domsArray.push(document.elementFromPoint(e.clientX-i, e.clientY-j));
for (var p = 0; p < domsArray.length; p++)
alert(domsArray[p].href);
);
它的作用是,每当用户点击浏览器页面中的任何点时,它都会收集该点附近的 href。
我想将 href 数组返回到我的 C#,以便我可以使用这些链接创建按钮。
但是,当我尝试时,
Console.WriteLine(retVal);
它没有在控制台上打印任何东西。 即使我将它们转换为带有其他虚拟返回值的字符串或 int 之类的东西,它也没有打印任何东西。 我得到正确的回报了吗? 有什么方法可以测试javascript的输出返回吗?
【问题讨论】:
您是否尝试过在调试时检查retVal
的值以查看它是否为空或有值?如果它确实有一个值,那么您应该能够在调试时看到数据类型、属性等...以便更好地了解您需要修改什么以获得所需的数据。
【参考方案1】:
我认为这可能是范围问题。你试过移动
var domsArray = [];
在(上方)之外
$('body').bind('click',function(e) ....
功能?比如
var domsArray = [];
$('body').bind('click',function(e)
for (var i = 0; i < 15; i++) < ... etc ....>
我还认为您缺少几个分号(script.txt 的第 3 行和第 4 行),尽管这可能不会有什么不同。
【讨论】:
以上是关于在 C# Webbrowser 控件 WPF 中从 Javascript 获取返回值的主要内容,如果未能解决你的问题,请参考以下文章
C# WPF WebBrowser控件调用Refresh()函数出现异常,导致程序“未响应”并无法继续运行
wpf中我想在WebBrowser控件上放置一个Border控件
有没有办法在 wpf WebBrowser 控件之上呈现 WPF 控件?
CefSharp.wpf Web 浏览器导航事件 (C# .Net)