Перейти к содержанию
Fire Monkey от А до Я
  • 0

[TWebBrowser] Можно ли получить доступ к элементам разметки страницы HTML?


K0der86

Вопрос

Рекомендуемые сообщения

  • 0

Тоже очень интересует ответ, или направьте пожалуйста, как отловить нажатия кнопки в HTML страничке в TWebBrowser ?

 

Вообще схема следующая есть переменная string в ней HTML код внутри которого javascript, после выполнения скрипта определенные данные мне нужно получить в переменные, пока решил туповато пишу в MySql эти данные с помощью JavaScripta, по возврату в другую вкладку делаю запрос в MySql. В принципе работает, но хотелось бы конечно без бубнов, хотя эти данные все равно запишутся в БД.

Вопрос другой, по завершению всех манипуляций мне нужно нажать на кнопку HTML и переместиться в другую вкладку. 

Ссылка на комментарий
  • 0
  • Администраторы

TWebBrowser не поддерживает возврат результатов при выполнении JavaScript. Но если вам нужно нажать на кнопку или выполнить какие-либо действия без возврата результата в Delphi. То для этого можно использовать JavaScript. Для выполнения JavaScript кода в браузере нужно использовать:

TWebBrowser.EvaluateJavaScript
Ссылка на комментарий
  • 0

 

 

TWebBrowser не поддерживает возврат результатов при выполнении JavaScript. Но если вам нужно нажать на кнопку или выполнить какие-либо действия без возврата результата в Delphi. То для этого можно использовать JavaScript. Для выполнения JavaScript кода в браузере нужно использовать:

TWebBrowser.Gesko 

Это как раз не проблема, моя лично задача сводится к получению данных по какому маркеру кликнули на карте, и соответствующие действия в Delphi onClickMarker. вот если бы разработчики задумались о том что EvaluateJavaScript мог бы стать функцией а не процедурой, и возвращать результат если он есть. Простое решение без добавления эвентов в компаненту. 

Изменено пользователем Syb
Ссылка на комментарий
  • 0

Ну, как промежуточный вариант-сделать мобильный клиент под конкретный сайт:

1.получаешь страницу с помощью get;

2. парсишь ее как нужно (например с помощью .Pos);

3. результаты выводишь в тот же webbrowser (LoadFromStrings);

4.элементы управления выводишь на форму отдельно и обрабатывешь их post запросом;

5. п.3

6. profit

 

А вот как сделать универсальный вариант - может еще кто подскажет :)  

Ссылка на комментарий
  • 0

Может кто знает, в 10.4 под Андроид появилось решение, что бы просто получать содержимое страницы как текст (длинный текст)?

Решил эту задачу через одно место (сокеты), бывает подвисает приложуха, но хотелось бы напрямую, без костылей.

Ссылка на комментарий
  • 0
12 часов назад, Станислав Менинник сказал:

Может кто знает, в 10.4 под Андроид появилось решение, что бы просто получать содержимое страницы как текст (длинный текст)?

Решил эту задачу через одно место (сокеты), бывает подвисает приложуха, но хотелось бы напрямую, без костылей.

Если я правильно понял, то

..
uses System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent;
..
procedure Button1.Click(Sender:TObject);
begin
Memo1.lines.LoadFromStream(NetHTTPClient1.Get('http://yoursite.com/').ContentStream);
end;  

 

Ссылка на комментарий
  • 0
В 03.07.2021 в 08:37, PowerOwl сказал:

Если я правильно понял, то

..
uses System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent;
..
procedure Button1.Click(Sender:TObject);
begin
Memo1.lines.LoadFromStream(NetHTTPClient1.Get('http://yoursite.com/').ContentStream);
end;  

 

Не совсем верно поняли. Я имел ввиду, сам компонент браузер и есть источник данных. Общая схема такая:

- загрузить в браузер текст

- что то редактируем силами JS-редактора

- забираем из браузера текст

 

Столкнулся с еще проблемами:

- вертикального скролбара внутри браузера нет вообще для редактируемого поля JS-редактора (под Андроидом, а под виндой есть)

- JS не работает, если загрузить текст из строки, а не через Navigate. https://quality.embarcadero.com/browse/RSP-34243

Изменено пользователем Станислав Менинник
Ссылка на комментарий
  • 1

wb: TWebBrowser;

получение ответа из браузера в приложение:

procedure TMainForm.wbDidFinishLoad(ASender: TObject);
var i:integer;
begin
    // вызывается несколько раз, поэтому кэшируем
    if lastCommand=wb.URL then exit;
    lastCommand:=wb.URL;
    i:=wb.URL.IndexOf('#action=');
    if i>0 then TActionThread.Create(wb.URL.Substring(i+1));
end;

// на IOS wbDidFinishLoad не срабатывает
procedure TMainForm.wbShouldStartLoadWithRequest(ASender: TObject;
  const URL: string);
{$IF DEFINED(IOS) OR DEFINED(MACOS)}
var i:integer;
{$ENDIF}
begin
{$IF DEFINED(IOS) OR DEFINED(MACOS)}
    if lastCommand=URL then exit;
    lastCommand:=URL;
    i:=URL.IndexOf('#action=');
    if i>0 then TActionThread.Create(URL.Substring(i+1));
{$ENDIF}
end;

запрос из приложения в браузер:

{$IFDEF ANDROID}
          wb.EvaluateJavaScript1(s);

{$ELSE}
          wb.EvaluateJavaScript(s);
{$ENDIF}
 

посылаем ответ из браузера:

document.location.href = '#action=' + name + '&ts=' + (+new Date) + Math.random()

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Похожий контент

    • Автор A_l_ex
      Уважаемые форумчане, искал на форуме, но возможно не нашел что-то похожее по своему вопросу ... 
      Нужна возможность использовать жесты в TWebBrowser. Стандартные жесты в FMX как я понял не работают, TWebBrowser очевидно благополучно игнорирует их.
      Читая API на developer.apple.com нашел то что нужно setAllowsBackForwardNavigationGestures. Данное действо доступно в модуле iOSapi.WebKit. 
      Как заставить TWebBrowser на форме выполнять это требование? 
      В попытках найти решение пытался выполнить такое извращение, явно осознавая что это не совсем то что нужно: 
      На форуме нашел такой запрос но он за 2014 год и проблема в том что мне нужно не создавать свой WebView а попытаться заставить родной TWebBrowser делать это. Но если это не возможно то прошу подсказать как воткнуть на форму свой WebView.
      Читал что есть возможность использовать Deligate но как именно это делать, пока не понятно.
      Буду рад любым вариантам!
      P.S. Забыл упомянуть. Студия разработки RAD Studio 10.4.2 Sydney. Аппаратура MacBook Pro 13 Big Sur 11.2.3 + XCode 12.5 + Apple iPhone 11(14.5).
    • Автор Yarpda
      Добрый день всем!
      Стоит задача сделать информационный киоск (управлений только через тачскрин) под управлением Windows. Фактически нужно на экран вывести сайт компании, но проблема в том что управление должно быть таким же как в мобильных устройствах.
      Т.е. реакция на касание как Pan (прокрутка). Если же собирать проект под винду, то при нажатии на экран и движении пальца прокрутка страницы в браузере не происходит, а происходит выделение текста на станице, а нужно максимально сделать как на мобильных платформах. Посмотрел настройки TWebBrowser и на VCL и на FMX, но ничего похоже не нашел, чтобы позволило так сделать. Если у кого-то была такая практика, или хотя бы знаете как это можно реализовать (желательно наиболее просто), прошу подсказки.
    • Автор Сергей Сергеев
      Обнаружил глюк, как исправить - не нашел, по вот этому обсуждению на Embe - похоже он с 15 года..
      https://forums.embarcadero.com/thread.jspa?threadID=116534
      Выглядит так, взял из примера WebBrowser, прописал в дизайне адрес, к примеру Яндекс,
      и запускаю на Ифоне 5 - нажимаю Гоу, при клике на любой ссылке ( например на большой надписи Яндекс в центре), вдруг откдуда не возьмись - появляется клава - английская,
       
       
       
      которая Done, ничего никуда не вводит, и не прячется от слова Никак ( с экрана)
      дальше - тапаем в поле ввода поиска, вылазит похоже еще одна, уже похоже ФМХ клава - со словом Готово, которая работает..
      переключается и по готово - прячется.
       
       
       
       
      но после того как Готово спряталась - эта ( от Сафари чтоли ) остается, по Доне не скрывается, и при кликах по ссылкам - прячется и опять вылазит..
       
      сделал то что написано в обсуждении, но это прячется только второй ( Доне)ТулБар - клавы две так и висят..
      Ничего по теме не нашел, похоже глюк старый, и возможно уже решенный..
      пс.  клавиатуры не две все таки, два тул бара, повесил на он хайд, он Шоу обработчики, происходит следующее, по Готово - прячется клава и сразу опять показывается уже без "готово" - с "доне".. она же сразу показывается при клике по ссылке..
       
    • Автор Сергей Сергеев
      Приветствую, обнаружил досадную особенность при работе TWebBrowser  в Андроид
      Есть браузер - WBWrite, на нем страница html открывается с сайта с формой записи, есть поле id = PR_FIO
      Сделал кнопку, на клик повесил
      WBWrite.EvaluateJavaScript('var el = document.getElementById(''PR_FIO''); el.value = ''test'';');
      в WIN - все четко работает, в  Андроид вся форма стирается, остается только надпись test.
      элемент находится , если вместо "test" я ставлю el - то в в поле ввода - [object Html Input Element]
       
       
    • Автор Денис Демин
      Здравствуйте, есть такая задача:
      1) Необходимо вставить карту от Яндекса на форму.
      2) Необходимо вставить информацию текстовую (информация о доставке или оплате), это можно также вставить HTML кодом, а лучше просто отформатированным содержанием. 
      Заранее спасибо всем за ответы.
    • Автор Anasazi
      Доброго времени суток! Есть приложение в котором используется TWebbrowser, хотел сделать чтобы при свайпе справа-налево выполнялся WebBrowser.GoBack, но обнаружил что жесты работают везде кроме TWebbrowser. Подскажите пожалуйста есть ли какое-либо решение этой проблемы? RAD Studio Berlin Update 1.
    • Автор Alex Bakulin
      Для формирования страницы в WebBrowser использую LoadFromStrings
      Задача - добавить к странице скрипт на JS. Если я просто добавляю строку <script src="скрипт из сети"></script>, то он не срабатывает. В чем может быть проблема? 
    • Автор b_sidor
      Как из компонента TWebBrowser сохранить страницу в файл?
    • Автор fabiano Bom dia
      I'm using WebBrowser to open the website. I can not select the file .. It does not work correctly. I click to select the File and nothing happens. The same happens with facebook I can not post photos. .
      How to solve it?
       
       
      procedure TForm1.FormCreate(Sender: TObject);
      begin
        WebBrowser1.Navigate('https://www.facebook.com');
      end;
      end.


    • Автор Anasazi
      Стандартный TWebbrowser под android не может открыть ссылку типа <a href="tel:1-555-555-5555"> и набрать номер. Может можно что-нибудь с этим сделать? Или есть какие-либо альтернативы TWebbrowser для android?

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...