2014-05-21 38 views
1

我正在做一個Delphi XE5 VCL窗體應用程序生成的HTML頁面,並有主窗體上一個TIdHTTPServerIdHTTPServer過程的CommandGet添加參考dynamicaly JavaScript文件中的Delphi VCL應用

procedure TForm1.IdHTTPServerCommandGet(AContext: TIdContext; 
    ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 
var responce: TStringList; 
begin 
if pos('someString', ARequestInfo.UnparsedParams) > 0 then 
    begin 
     responce:= TStringList.Create; 
     try 
     responce.Add('<html>'); 
     responce.Add('<head>'); 
     responce.Add('<title>Index</title>'); 
     responce.Add('<script src="E:\ProjectFolder\script.js"></script>') 
     responce.Add('</head>'); 
     // HTML content 
     responce.Add('</html>'); 
     AResponseInfo.ContentText := responce.Text; 
     finally 
     responce.Free; 
     end; 
    end; 
end; 

當我更改項目的目錄時,瀏覽器不可見.js文件。我的問題是如何設置對.js文件的引用,使其在更改項目目錄時可用。

+4

傳統的HTML路徑是POSIX格式(即/project/scripts/scripts.js)。避免使用驅動器號。我會創建一個名爲腳本的子文件夾,將我的JS文件放在該文件中,然後引用腳本'' –

+3

'資源位置必須相對於資源根目錄,與服務器上的真實文件夾結構無關 – mjn

+0

@Andy_D我將.js文件移動到另一個目錄,然後將路徑設置爲javascript文件projectDirectoryPath:= GetCurrentDir +'\ scripts \ script.js';當我在鉻中測試,結果是:不允許加載本地資源:+文件路徑(這是可以的)。 –

回答

2

最直接的解決辦法是包括HTML腳本:

var 
    scriptContent: TStringList; 

... 
responce.Add('<script type="text/javascript">'); 
scriptContent := TStringList.Create; 
try 
    scriptContent.LoadFromFile('<name of the script file>'); 
    responce.AddStrings(scriptContent); 
finally 
    scriptContent.Free; 
end; 
responce.Add('</script>'); 
+0

謝謝。這解決了我的問題:) –

+3

直接在HTML中嵌入腳本文件有很多缺點(安全性,資源使用,緩存)。 – mjn

4

傳統上,HTML中的路徑爲Posix格式(即/project/scripts/scripts.js)。避免使用驅動器號。我會做一個稱爲腳本的子文件夾,把我的JS文件在,然後引用腳本

+0

這是良好的做法,但沒有幫助:) –