簡體   English   中英

如何在C#中評估Javascript? (需要獲取網頁的所有鏈接,包括java腳本生成的鏈接)

[英]How to evaluate Javascript within C#? (need to get all links for a web page, including java-script generated ones)

背景:我必須下載帶有資源的網頁以供離線觀看,但是作為其中的一部分,我必須“重寫”URL以獲取與HTML網頁的鏈接,以便它們起作用。 這是更好的標准類型的鏈接,但我現在意識到有一些鏈接是由JavaScript動態創建的。

問題:我可以使用什么方法(甚至現有的庫)將帶有動態生成鏈接的網頁(從javascript)轉錄到具有正常非動態鏈接的網頁。 (那時我可以做我需要做的URL重寫)

筆記:

  • 這幾乎就像我需要一個Javascript解釋器庫,我將頁面HTML傳遞給它,然后它可能會吐出生成的Java代碼? 然后我可以按照自己的意願重寫鏈接(結果不會使用javascript動態方法)。
  • Context是一個C#WinForms(3.5)應用程序。

謝謝

PS。 一些例子:

<script type="text/javascript">
        <!--
            document.write("<a href=\"/home.asp\" onMouseOver=\"MM_swapImage('tab_home','','/_includes/images/tab_home_.gif',1)\" onMouseOut=\"MM_swapImgRestore()\"><img src=\"/includes/images/tab_home.gif\" alt=\"Home\" name=\"tab_home\" width=\"45\" height=\"18\" border=\"0\" id=\"tab_home\"><\/a>");

            if (window.document.location.pathname.indexOf("mysite.asp") != "-1") {
                document.write("<a href=\"/mysite.asp\" onMouseOver=\"MM_swapImage('tab_my_site','','/_includes/images/tab_my_site_.gif',1)\" onMouseOut=\"MM_swapImgRestore()\"><img src=\"/_includes/images/tab_my_site_.gif\" alt=\"My Site\" name=\"tab_my_site\" width=\"76\" height=\"18\" border=\"0\" id=\"tab_my_site\"><\/a>");
            }
            else {
                document.write("<a href=\"/mysite.asp\" onMouseOver=\"MM_swapImage('tab_my_site','','/_includes/images/tab_my_site_.gif',1)\" onMouseOut=\"MM_swapImgRestore()\"><img src=\"/_includes/images/tab_my_site.gif\" alt=\"My Site\" name=\"tab_my_site\" width=\"76\" height=\"18\" border=\"0\" id=\"tab_my_site\"><\/a>");
            }

<script type="text/javascript">
  var fo = new FlashObject("/homepage/ia/flash/hero/banner.swf?q=1", "hero", "642", "250", "8", "#ffffff");
  fo.addParam("wmode", "transparent");
  fo.addParam("allowScriptAccess", "always");
  fo.addParam("base", "/homepage/ia/flash/hero/");
  fo.write("flashContent");
</script>

<td width="1%">  
  <a href="javascript:checksubmit(this);" 
      onmouseover="MM_swapImage('but_srch_go','','/_includes/images/but_srch_go_.gif',1)"      
      onmouseout="MM_swapImgRestore()">        
      <img src="http://localhost:3000/sites/http://qheps.health.qld.gov.au/_includes/images/but_srch_go.gif" alt="Go" name="but_srch_go" width="57" height="40" border="0">   
   </a>
</td>

如果您沒有使用WebBrowser控件,那么您可以在JScript.NET中使用JScriptEvaluate方法,但您可能需要評估的不僅僅是一個簡單的表達式。 WebBrowser控件當然是更容易的路徑。

如果您使用的是WebBrowser控件,則可以很容易地從C#調用“eval”方法。

/// <summary>
/// Handles the Navigated event of the browser control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="T:WebBrowserNavigatedEventArgs"/> instance containing the
/// event data.</param>
private void browser_Navigated( object sender, WebBrowserNavigatedEventArgs e )
{

    string codeToEval = "window.alert('blah')";

    if ( browser.Document != null ) {

        object window = browser.Document.Window.DomWindow;
        if ( window != null ) {

            Type windowType = window.GetType();
            BindingFlags flags = BindingFlags.InvokeMethod | BindingFlags.Instance;
            string[] args = { codeToEval, "JScript" };

            windowType.InvokeMember( "[DispID=1165]", flags, null, window, args );

        }   // if

    }   // if

}

還有第三種選擇。 您可以隨時下載HTML頁面,而無需重寫URL,然后在向用戶顯示HTML的代碼中,您可以捕獲鏈接上的點擊並取消導航,而是導航到相應的“離線”鏈接。

暫無
暫無

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

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