簡體   English   中英

C#WebBrowser單擊提交按鈕沒有響應

[英]C# WebBrowser click submit button with no response

這是我第一次在StackOverflow上提問,我將盡我所能。

當我使用Chrome,Firefox和IE打開網站時,在選擇要上傳/升級到服務器(我的路由器)的文件后,提交按鈕upgrade可以正常工作。

但是,當我使用“ WebBrowser ”組件在C#Winform項目上嘗試使用它時,無論是手動單擊按鈕還是編寫C#代碼來觸發提交按鈕提交按鈕都不會響應在選擇文件后 )。 onClick事件。

有人有線索嗎? 任何幫助將不勝感激,謝謝!

PS:很抱歉,由於我目前在一家公司工作,因此無法提供有關該網頁的大量圖片。

這是網頁的外觀 在此處輸入圖片說明

該網頁的html代碼如下所示:

<table>
    <td>
        <label class="subtt2" style="margin-bottom:8px;font-size:14px">
            Software Image:
        </label>
    </td>
    <td>
        <div class="file-box">
            <input id="firmware" name="fupgrade.bin" class="file" 
                   onchange="getfileName()" type="file" style="cursor:pointer">
            <input id="filename" class="txt" type="text">
            <input class="btnWtn" value="Browse" type="button">
            <label class="error" id="lupgradeforbidden" style="display: none"></label>
        </div>
    </td>
</table>
<div class="buttonStyle" align="left">
    <input name="UPLOAD_ACTION" id="UPLOAD_ACTION" value="Upgrade"
           onclick="upgradeRouter()" type="button">
</div>

upgradeRouter()如下:

    function upgradeRouter()
{
    var FIRMWARE = document.getElementById( "firmware" );
    var UPLOAD_ACTION = document.getElementById( "upload_action" ); 

    if( FIRMWARE.value == "" )
        alert( "Please select firmware file" );
    else
    {             
        fileSize = FIRMWARE.files.item(0).size;

        if(fileSize > 0)
        {
            if( uploading == 0 )
            {              
               document.forms["myForm"].submit();
               setTimeout("firmware_update_query_request();", POLLING_FW_STATUS_SECONDS*1000);
               document.getElementById('upgradeFrame').style.display = 'none';  
               document.getElementById('upgradeModalBox').style.display = 'block';             
               UPLOAD_ACTION.value = "Cancel";
               uploading = 1;
            }
            else
            {
                uploading = 0;
                UPLOAD_ACTION.value = "Update";
                myForm.reset();
            }
        }
    }

    return false;   
}

由於fileSize = FIRMWARE.files.item(0).size; 崩潰(導致沒有響應就單擊升級按鈕),針對我的問題的解決方法是將腳本注入到網頁中, upgradeRouter()再次執行我的upgradeRouter()版本。

我事先手動設置了fileSize的值。

注入代碼如下所示

 public void InjectScript()
    {
        HtmlElement headElement = webBrowser1.Document.GetElementsByTagName("head")[0];
        HtmlElement scriptElement = webBrowser1.Document.CreateElement("script");
        IHTMLScriptElement element = (IHTMLScriptElement)scriptElement.DomElement;
                   element.text = "function upgradeRouter_M()" +
                               "{ " +
                                  "var FIRMWARE = document.getElementById(\"firmware\"); " +
                                  "var UPLOAD_ACTION = document.getElementById(\"upload_action\");" +
                                  " if (FIRMWARE.value == \"\")" +
                                       " alert(\"Please select firmware file\");" +
                                  " else" +
                                  "{" +
                                      "fileSize = 47599364;" +
                                      "" +
                                      "if (fileSize > 0)" +
                                      "{" +
                                           "if (uploading == 0)" +
                                           "{" +
                                                 "document.forms[\"myForm\"].submit();" +
                                                  "setTimeout(\"firmware_update_query_request();\", POLLING_FW_STATUS_SECONDS * 1000);" +
                                                  "document.getElementById('upgradeFrame').style.display = 'none';" +
                                                  "document.getElementById('upgradeModalBox').style.display = 'block';" +
                                                  "UPLOAD_ACTION.value = \"Cancel\";" +
                                                  "uploading = 1;" +
                                          "}" +

                                          "else" +
                                          "{" +
                                                  "uploading = 0;" +
                                                  "UPLOAD_ACTION.value = \"Update\";" +
                                                  "myForm.reset();" +
                                          "}" +
                                       "}" +
                                   "}" +
                               "}";

        headElement.AppendChild(scriptElement);
        webBrowser1.Document.InvokeScript("upgradeRouter_M");
        Console.WriteLine("Injection completed");
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM