Javascript 无法从TIdHTTPCommandGet过程OnCommandGet访问.js文件
我正在制作一个VCL表单应用程序,主表单上有一个TIdHTTPServer和一个IdHTTPServer过程的CommandGet:Javascript 无法从TIdHTTPCommandGet过程OnCommandGet访问.js文件,javascript,delphi,indy,http-get,Javascript,Delphi,Indy,Http Get,我正在制作一个VCL表单应用程序,主表单上有一个TIdHTTPServer和一个IdHTTPServer过程的CommandGet: procedure TForm6.IdHTTPServerPaymentsCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); var path: string; content: TFile
procedure TForm6.IdHTTPServerPaymentsCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
path: string;
content: TFileStream;
begin
AResponseInfo.CharSet := 'UTF-8';
path := GetCurrentDir.Remove(GetCurrentDir.Length - 11) + 'index.html'; // Length('Win32\Debug') = 11
if pos('profile&userName=', ARequestInfo.UnparsedParams) > 0 then
begin
content := TFileStream.Create(path, fmOpenReadWrite);
try
AResponseInfo.ContentStream := content;
finally
content.Free;
end;
end;
end;
index.html包含:
<html>
<head>
<title>Profile</title>
<script type="text/javascript" src="scripts/script.js"></script>
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
</head>
<body onload="sampleAlert()"><!-- sample function from script.js -->
<!-- Page content -->
</body>
</html>
轮廓
问题是,当我在浏览器中打开index.html文件时(不启动应用程序),页面工作正常,但当我启动VCL应用程序时,我无法访问script.js(当使用IE9进行测试时:“属性“sampleAlert”的值为null或未定义,不是函数对象”)。你知道怎么解决吗 您的代码始终返回index.html文件,与客户端请求的文档无关。因此,如果客户端收到index.html并尝试呈现它,客户端将检测到对资源scripts/script.js的引用,并向服务器发送一个HTTP GET请求。但是服务器忽略请求资源的名称(在RequestInfo参数中给出),再次读取index.html文件并返回其内容,而不是JavaScript文件。客户端需要一个有效的JavaScript文档,但收到的却是一个HTML文档
要修复它,请检查
ARequestInfo.Document
属性,并返回请求资源的内容。我还建议使用AResponseInfo.ContentStream
对于物理文件,只需为其分配一个TFileStream
。不要使用TFile.ReadAllText()
将文件读入内存,而只是为了分配AresOnSeInfo.ContentText
。太过分了。雷米,美赞臣谢谢你的建议。我还有一个问题:使用ARequestInfo.Document
我无法访问.cssfiles@mitko.berbatov请提供更多细节:提供.js和.css文件的区别在哪里?@mjn.css文件位于'styles/style.css'中;在index.html中添加头标记;在IE9中,我得到:“无法查看此样式表,因为它的源与页面位于不同的域”@mitko.berbatov我建议创建一个新的Stackoverflow问题,并包括一个演示此问题的小HTML示例,作为一个可复制的测试用例。仅错误消息不能提供足够的信息。