2012-11-07 156 views
0

我用JavaScript寫了一個HTML頁面,一個PHP文件和一個shell腳本 它們全都在同一臺機器上我運行shell腳本,它會打開Firefox的頁面, 當JavaScript完成時,它會POST到訪問getdata.phpshell腳本可以檢測JavaScript是否在Firefox上運行?

<form id="hidden_form" method="POST" action="getdata.php" ></form> 

訪問getdata.php會做的東西,然後它會在一段時間內的信號發送到shell腳本

上面是正常的行爲,我很害怕,在PHP或JavaScript遇到錯誤,不要將信號發送到shell腳本

有沒有什麼好的和簡單的方法讓shell腳本檢測JavaScript是否正在運行?

一位下面的人提到我可以讓javascript定期發送請求到服務器,比如每2分鐘一次,但是如何讓shell腳本注意到這個/得到信號?

回答

0

正如有人建議,你可以使用setInterval查詢服務器,看看JavaScript引擎是否仍在運行,但這也意味着只有執行setInterval的JavaScript線程是實際運行的線程(取決於哪種錯誤可能會出現)。你可以將這個帖子寫到「status.php」,這個文件可以接觸/寫入磁盤上的一個文件,bash腳本可以輪詢它來查看它是否定期更新。

但是我建議你看看phantomjs這樣的東西,它可以讓你解決這些問題。

+0

當我發佈到status.php時,status.php會自動顯示在瀏覽器中而不是原始的html頁面,如何防止這種情況發生? – user1769686

+0

使用XMLHTTPRequest調用時,大多數JavaScript庫以某種方式包裝它(例如帶有$ .get/$ .post/$ .ajax的jQuery)。 – MatsLindh

+0

是否有任何代碼片段?我認爲得到和發佈仍然要求該PHP頁面回到瀏覽器 – user1769686

0

編號

記住:Javascript正在客戶端瀏覽器上遠程運行; PHP(和你的shell腳本)在服務器上。

什麼你可以做的是建立一個報警(在服務器上)當您發送網頁,並調用報警處理程序,如果它觸發:

+0

它們都在同一臺機器上,我只是使用本地apache服務器 – user1769686

+0

的運行時間是varialbe,所以報警不太合適 – user1769686

0

如果您的JavaScript正在運行一個長時間處理的腳本,您可能會間歇性地在設定的時間間隔內向服務器提交請求。如果您在設定的時間段(間隔x2或w/e)之後沒有看到請求,並且信號在完成時尚未收到,則可以假設JavaScript本身已停止運行/中斷。

setInterval("methodofcommunicatingtotheserver", 1000); 

+0

不錯的主意,但如何讓shell腳本注意到這一點? – user1769686

0

..as之前說:

在這種情況下你最好的選擇是,要麼:

  1. 重新設計你的腳本。它是絕對必要的通過javascript in-browser發送請求到php頁面嗎?
  2. 如果對上述的回答是肯定的,看看Selenium,特別是Selenium WebDriver

它並不提供綁定到bash腳本開箱即用,但它很容易從其他語言,如Python(或PHP,他們說)使用。

相關問題