2017-08-04 1 views
0

簡単なhtmlテストページを作成しました。私は14時50分19秒C#Windows Forms App - htmlを開くことでリクエストを送信

@

2017年4月8日:ページは、その後、私は値を、例えば、ファイルdate.txtに書かれている私のウェブサーバにタイムスタンプを送信する(http://localhost/cut/public/updateFile)オープンされた場合Webサーバーにこのファイル(date.txt)の値を取得するように要求するC#Windows Forms Appも書きました(毎秒X秒)。

私の目標は、サーバー上のファイルからそれを読み取ることによって、通知ボックスX秒ごとに現在の時刻を表示することです(練習用のみ)

しかし、私は、ファイルの内容を取得する前に、私は更新する必要がありますまず現在の日付と時刻を取得します。

これを上記のルールで解決することは可能ですか?私はいつも4/8/2017 @ 14:50:19を取得するしかしそれが必要として

private void timerA_Tick(object sender, EventArgs e) 
    { 
     sendWebRequest("http://localhost/cut/public/updateFile"); 
     timerA.Stop(); 
     timerA2.Interval = 5000; 
     timerA2.Start(); 
    } 


    private void timerA2_tick(object sender, EventArgs e) 
    { 

     //Returns the content of date.txt 
     string response = sendWebRequest("http://localhost/cut/public/fileApi?action=read&targetFile=date"); 

     //Show Notification 
     notifyIcon1.Visible = true; 
     notifyIcon1.Icon = SystemIcons.Exclamation; 
     notifyIcon1.BalloonTipTitle = "File content"; 
     notifyIcon1.BalloonTipText = response; 
     notifyIcon1.BalloonTipIcon = ToolTipIcon.Info; 
     notifyIcon1.ShowBalloonTip(10000); 

     timerA2.Stop(); 
     timerA.Start(); 
    } 

    /** 
    * Send request and get response as string 
    */ 
    public static string sendWebRequest(string URL) 
    { 
     WebRequest request = WebRequest.Create(URL); 
     WebResponse response = request.GetResponse(); 

     StreamReader streamReader = new StreamReader(response.GetResponseStream()); 

     return (string)streamReader.ReadToEnd(); 

    } 

それが更新されません: は、これが私の試みです。

WebRequest.Createはそのままhtmlファイルを取得してC#アプリケーションに戻しますが、サーバーにリクエストするjavascriptは実行しないため、この方法では動作しません。

このように問題を解決するためにC#が設計されていない場合や、このようにして実現できるかどうかを尋ねるために、この例を作成しましたか?

私の唯一のアイデアは、私をForm1に隠されたウェブブラウザを作成して、アップデートを開始しhttp://localhost/cut/public/updateFileを開くことですが、私はこれでも動作するかどうかを確認していません。


enter image description here

私は、WebBrowser要素を作成し、次のように更新URLを呼び出します。

webBrowser1.Navigate("http://localhost/cut/public/updateFile"); 

しかし、jqueryのファイルに存在しているスクリプトエラーメッセージ、たくさんのがあります。

enter image description here

そして、私のスクリプトがあるため動作しないjqueryののいずれかの動作しません。 jqueryでは動作しませんが、jQueryファイルのすべてのエラーを修正する必要があります。

この問題を解決するにはどうすればよいですか?

+0

'=真webBrowser1.ScriptErrorsSuppressed;' - これを設定し、もう一度やり直してください - https://stackoverflow.com/questions/2476360/disable-javascript-error-in-webbrowser-control – Subbu

+0

@Subbuは既に試しましたが、スクリプトがまだ動作していないので役立ちません。 – Black

答えて

0

実際のブラウザからhttp://localhost/cut/public/updateFileを開くと、ページ上でJavaScriptが実行されます。 WebRequestを使用してWindowsフォームアプリケーションからこのページをリクエストすると、ページのコンテンツが返されますが、レンダリングまたは処理されないため、ページ上でjavascriptを処理または実行することはありません。

+0

しかし、ユーザーの操作なしでプロセス全体を自動化しようとすると、5秒ごとにページを更新する必要はありません。方法が必要です。私はC#webbrowserで試してみましたが、 'webBrowser1.Navigate(" http:// localhost/cut/public/updateFile "、true);でブラウザを外部で開くと、これは動作します。どのようにする必要があります、誰も窓が常にポップアップしたい。 – Black

+1

もう1つのアプローチは、用意されたページの要求時に実行される、またはhttpモジュールを作成する、C#でサーバー側のコードを書き込むことです。 – Frits

0

私は自分のフォームにWebBrowserコントロール要素を追加し、このようにその中にURLを呼び出すことによってそれを解決:

webBrowser1.Navigate("http://localhost/cut/public/updateFile"); 

をしかし、私は、それはjQueryのせずに動作させるために私のJavaScriptを書き直ししなければなりませんでしたC#Webbrowserは何もサポートしていない極端に古いInternet Explorerのようです。

enter image description here

予想通り今では動作します:以下のようなスクリプトエラーを指しているたくさんの警告がありました。私はいつか誰かがこれよりはるかに良い解決策を見つけてくれることを願っています。

UPDATE

私はHTMLのheadセクションに次の行を追加することで入手可能な最新のブラウザを変更することができました:

<meta http-equiv="X-UA-Compatible" content="IE=edge"/> 
<!-- IE=edge instructs the WebBrowser control to use the latest version of IE it supports --> 
関連する問題