|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
ServerSocket передать браузеру html документ с JavaScript
Добрый день.
Я через компонент 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 end http://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 – исправил. Может быть скажите в чем дело? |