![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день.
Я через компонент ServerSocket (порт = 80) хочу передать браузеру html документ с JavaScript. Если передаю чистый html, то проблем нет. Например: <html> <BODY> Hello! </BODY> </html> Как только добавляю в документ простой JavaScript, то он не выполняется. Например: <html> <BODY> Hello! <script type="text/javascript"> for (i = 0; i <= 9; i++){ document.write('Шаг № ' + i) document.write('<br>') } </BODY> </html> Я так понимаю что перед передачей документа, должен быть ответ сервера HTTP/1.1 200 OK и т.д. Прочитал и перепробовал куча информации, интересной, но к сожалению ответа так и не нашел. Прошу Вашей помощи! |
|
#2
|
||||
|
||||
|
тэг script не закрыт:
Код HTML:
|
|
#3
|
|||
|
|||
|
Цитата:
Это я здесь опечатался, в коде верно написано, и при перетаскивании локального файла с этим кодом в любой браузер все нормально работает, т.е. скрипт выполняется. |
|
#4
|
||||
|
||||
|
причин может быть много, например с длиной опечатался или в 13 строчке ошибка
|
|
#5
|
|||
|
|||
|
Цитата:
Какая 13-я строчка? |
|
#6
|
||||
|
||||
|
хотя бы Content-Type и Content-Length, если не чанками передашь
|
|
#7
|
||||
|
||||
|
и про разделитель \r\n не забыть
|
|
#8
|
|||
|
|||
|
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
for i:=0 to ServerSocket1.Socket.ActiveConnections - 1 do
begin
ServerSocket1.Socket.Connections[i].SendText('HTTP/1.1 200 OK'+#$0D+#$0A);
ServerSocket1.Socket.Connections[i].SendText('Server: MyServer'+#$0A);
ServerSocket1.Socket.Connections[i].SendText('Content-type: text/html'+#$0A);
//ServerSocket1.Socket.Connections[i].SendText('Accept-Ranges: bytes'#$0A);
s := IntToStr(Length(Memo1.Lines.Text));
ServerSocket1.Socket.Connections[i].SendText('Content-Length: '+ s +#$0A);
ServerSocket1.Socket.Connections[i].SendText('Connection: close'+#$0A+#$0A);
//ServerSocket1.Socket.Connections[i].SendText('Connection: keep-alive'+#$0A+#$0A);
for j:=0 to Memo1.Lines.Count-1 do
ServerSocket1.Socket.Connections[i].SendText(Memo1.Lines[j]);
ServerSocket1.Socket.Connections[i].Close;
end;Т.е. при любом запросе выдаем клиенту это. В Memo1 тот HTML-код который я писал выше. В итоге выводит только "Hello" без выполнения JS. Последний раз редактировалось Admin, 29.08.2012 в 21:25. |
|
#9
|
||||
|
||||
|
все работает:
Unit1.pas Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
ServerSocket1: TServerSocket;
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
Socket.SendText('HTTP/1.1 200 OK'#13#10);
Socket.SendText('Content-Type: text/html'#13#10);
Socket.SendText('Content-Length: '+IntToStr(Length(Memo1.Text))+#13#10);
Socket.SendText(#13#10);
Socket.SendText(Memo1.Text);
end;
end.Unit1.dfm Код:
object Form1: TForm1
Left = 192
Top = 124
Width = 870
Height = 640
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsStayOnTop
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 80
Top = 64
Width = 489
Height = 225
Lines.Strings = (
'<html>'
' <body>'
' Hello!<br>'
' <script type="text/javascript">'
' for(i = 0; i < 10; i++){'
' document.write(''i = '' + i)'
' document.write(''<br>'')'
' }'
' </script>'
' </body>'
'</html>')
TabOrder = 0
WordWrap = False
end
object Memo2: TMemo
Left = 80
Top = 320
Width = 489
Height = 233
TabOrder = 1
end
object ServerSocket1: TServerSocket
Active = True
Port = 8081
ServerType = stNonBlocking
OnClientRead = ServerSocket1ClientRead
Left = 664
Top = 208
end
endhttp://localhost:8081/ |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
MaxN (29.08.2012)
| ||
|
#10
|
|||
|
|||
|
Спасибо NumLock!!!
Всё действительно заработало. Начал искать в чем же дело и выяснил что JS не выполняется когда в порт html документ из Memo1 передается построчно в цикле. Почему так происходит так и не выяснил, но главное что заработало! Спасибо еще раз!!!! |
|
#11
|
||||
|
||||
|
Цитата:
|
|
#12
|
|||
|
|||
|
Цитата:
ServerSocket1.Socket.Connections[i].SendText(Memo1.Text); на for j:=0 to Memo1.Lines.Count-1 do ServerSocket1.Socket.Connections[i].SendText(Memo1.Lines[j]); и перестало работать, поэтому и сделал такой вывод… \r\n – исправил. Может быть скажите в чем дело? |