,因爲我沒有找到使用AJAX請求或任何類似,我使用了一種-的醜workarround包括XmlHttpRequest
對於啓動協議終於解決了我的問題解決我的問題以適當的方式我仍然在使用document.location=cgit:[...]
我正在使用包含「鎖定文件」的服務器端系統 - 這就像通用虛擬文件,併爲每個請求生成名稱。
一旦用戶請求打開自定義協議,就會在服務器上專門爲該協議打開請求生成這樣的文件。
我在放置這些文件的服務器上創建了一個名爲「$ locks」的文件夾。一旦與協議相關的程序退出,相應的文件將被刪除。
網站持續檢查使用XmlHttpRequest
的請求文件是否仍然存在,如果沒有(例如測試之間的測試時間:1秒)則觸發回調。
新文件的結構如下:
lockThisRequest.php
:它的基礎上,req
網址參數的$鎖目錄中創建一個文件。
unlockThisRequest.php
:它刪除$ locks目錄中的文件;再次基於req
url參數。
它的JavaScript部分中有云:
function launchCgit(params,callback)
{
var lock = /* Generate valid filename from params variable */;
// "Lock" that Request (means: telling the server that a request with this ID is now in use)
var locker = new XmlHttpRequest();
locker.open('GET', 'lockThisRequest.php?req='+lock, true)
locker.send(null);
function retry()
{
// Test if the lock-file still exists on the server
var req = new XmlHttpRequest();
req.open('GET', '$locks/'+lock, true);
req.onReadyStateChanged=function()
{
if (req.readyState == 4)
{
if (req.status == 200)
{
// lock-file exists -> cgit has not exited yet
window.setTimeout(retry,1000);
}
else if (req.status == 404)
{
// lock-file not found -> request has been proceeded
callback();
}
}
}
req.send(null);
}
document.location = 'cgit:'+params; // execute custom protocol
retry(); // initialize lockfileCheck-loop
}
Ussage是:
launchCgit("doThisAndThat",function()
{
alert("ThisAndThat finished.");
});
的lockThisRequest.php
-file:
<?php
file_put_contents("$locks/".$_GET["req"],""); // Create lock file
?>
和unlockThisRequest.php
:
<?php
unlink("../\$locks/".$_GET["req"]); // Delete lock file
?>
本地程序/由協議執行的腳本可以簡單地調用類似:
#!/bin/bash
curl "http://servername/unlockThisRequest.php?req=$1"
它完成之後。
正如我剛纔說的這個工作,但它的東西,而不喜歡好的其他(恭喜如果你不停地跟蹤那些指令)
我寧願者優先一種更簡單的方式和(重要)這也可能導致lockThisRequest.php
和unlockThisRequest.php
文件的安全問題!
我很好用這個解決方案,因爲我只在受密碼保護的私人頁面上使用它。但是,如果您打算在公共或不受保護的頁面上使用它,您可能需要爲php文件添加一些安全性。
不管怎麼說,該解決方案現在對我的作品,但如果有人找到更好的方式來做到這一點 - 通過使用Ajax請求 - 例如,他/她會很歡迎這種方式添加到相應的stackoverflow-文檔或類似內容,並在此主題上發佈鏈接。我仍然對替代解決方案感興趣:)
添加一些代碼可能有助於回答問題。 – c0d3rman
好的,我將在 –
中編輯一些cgit:要啓動的是什麼? – matmo