【问题标题】:Specified cast is not valid when invoking javascript function in webbrowser在 webbrowser 中调用 javascript 函数时,指定的强制转换无效
【发布时间】:2015-06-21 11:46:56
【问题描述】:

我正在尝试在 webbrowser 中调用 javascript 函数。 网站有带有 javascript 功能的单独文件。 这是网站 html 文件的一部分:

<div class="header">
    <a class="buttonrg" onclick="$(this).hide();remove('56442741')"> Remove </a>
</div>

这是从 .js 文件中删除功能:

function remove(id) {
    $.ajax({
        type: "POST",
        url: "ajax/remove.php",
        data: "remove=" + id
    });
}

我正在尝试在 c# 中使用此脚本调用“删除”函数:

    public void RemoveOffer(int _id)
    {
        try
        {
            webBrowser.Document.InvokeScript("remove", new object[] { _id.ToString() });
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
     }

但当我尝试调用此脚本时,控制台总是向我显示错误:指定的转换无效。

可能出了什么问题?

【问题讨论】:

  • data: "remove=" + remove改为data: { "remove": id }后检查
  • 是否只有 C# 代码给出了错误?单击页面上的删除可以正常工作吗?
  • @XtremeBytes 是的,页面上的代码正在运行

标签: javascript c# invokescript


【解决方案1】:

您是否从创建它的线程以外的线程调用InvokeScript()?这样做会导致为我抛出此异常。

鉴于这种情况,这是一条奇怪的错误消息,但我通过 Invoke() 解决了这个问题

例如

    private void RemoveOffer(int _id)
    {
        if (webBrowser.InvokeRequired)
        {
            webBrowser.Invoke(new Action(() => { RemoveOffer(_id); }));
            return;
        }
        webBrowser.Document.InvokeScript("remove", new object[] { _id }); // Not sure if the .ToString() is required...
    }

【讨论】:

    【解决方案2】:

    data: "remove=" + remove 更改为data: { "remove": id }

    【讨论】:

    • 是的,网站上的脚本正在运行,但是当我尝试在 webbrowser 表单中调用它时,它仍然显示相同的消息,所以问题出在 c# 脚本中。
    • 为什么不删除 ToString() 调用?它是一个对象数组,所以 int 也可以工作。
    • 我之前试图用字符串数组调用它,这就是为什么有 ToString()。只是忘了删除它,但它也无法正常工作。
    • 是的..还是一样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2018-05-27
    • 2014-07-30
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多