Перейти к содержанию
  • Регистрация
  • 0
Alex Bakulin

Свой HTML в WebBrowser. Как добавить JS?

Вопрос

Для формирования страницы в WebBrowser использую LoadFromStrings

Задача - добавить к странице скрипт на JS. Если я просто добавляю строку <script src="скрипт из сети"></script>, то он не срабатывает. В чем может быть проблема? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0

Там здоровая библиотека, так не получится. Но скорее всего у меня проблема в том, что я здоровую строку передаю в функцию JS, весь текст страницы. Так что наверно какие-то символы ей не нравятся. Может переводы строки, может что-то еще. Пока не могу понять. Тут дело не в браузере, а в том что я входные данные еще не умею готовить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Лучше библиотеку в виде *.js файла положить рядом с html, подключив 

<script src="zdorovaya_biblioteka.js"></script>

 и с помощью 

WebBrowser1.EvaluateJavaScript();

вызывать из нее нужные функции.

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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


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

    • От Евгений Корепов
      Простое приложение для андроид - форма, на ней TWebBrowser. В WebBrowser открываем что то требующее разрешение на геолокацию. У примеру https://www.openstreetmap.org 
      В обычном браузере, при тыке на "Показать мое местоположение" появится popup окно с запросом разрешения на "Доступ к данным о вашем местоположении".
      Но в Delphi приложении описанном выше никакого запроса не приходит. ?
      Нашел решение для java https://forums.fusetools.com/t/geolocation-not-enabled-in-webview-on-android/1374 
      В функцию создания WebView 
      public static Object CreateWebView321(final boolean zoomEnabled,final boolean scrollEnabled) { ScrollableWebView wv = new ScrollableWebView(com.fuse.Activity.getRootActivity()); wv.getSettings().setJavaScriptEnabled(true); wv.getSettings().setUseWideViewPort(true); //enabled viewport meta tag wv.getSettings().setLoadWithOverviewMode(true); //mimic iOS Safari and Android Chrome wv.getSettings().setSupportZoom(zoomEnabled); wv.getSettings().setBuiltInZoomControls(zoomEnabled); wv.getSettings().setDomStorageEnabled(true); wv.setAllowScroll(scrollEnabled); return wv; } рекомендуется добавить следующий код
      wv.getSettings().setGeolocationEnabled(true); wv.setWebChromeClient(new WebChromeClient(){ @Override public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) { callback.invoke(origin, true, false); } }); В модуле FMX.WebBrowser.Android.pas это выглядит так
      constructor TAndroidWebBrowserService.Create; var LayoutParams: JRelativeLayout_LayoutParams; begin FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity); FWebView.getSettings.setJavaScriptEnabled(True); FListener := TWebBrowserListener.Create(Self); FWebView.SetWebViewListener(FListener); FFocusChangeListener := TFocusChangeListener.Create(Self); FWebView.setOnFocusChangeListener(FFocusChangeListener); FWebView.getSettings.setGeolocationEnabled(True); FWebView.getSettings.setAppCacheEnabled(True); FWebView.getSettings.setDatabaseEnabled(True); FWebView.getSettings.setDomStorageEnabled(True); FWebView.getSettings.setBuiltInZoomControls(True); FWebView.getSettings.setDisplayZoomControls(False); FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FWebView, LayoutParams); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FChildrenContainer, LayoutParams); SetEnableCaching(True); end; Вот суть вопроса - добавить delphi код. Пробую что то вот такое, но закончить ума не хватает
      constructor TAndroidWebBrowserService.Create; var LayoutParams: JRelativeLayout_LayoutParams; begin FWebView := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity); FWebView.getSettings.setJavaScriptEnabled(True); FListener := TWebBrowserListener.Create(Self); FWebView.SetWebViewListener(FListener); FFocusChangeListener := TFocusChangeListener.Create(Self); FWebView.setOnFocusChangeListener(FFocusChangeListener); FWebView.getSettings.setGeolocationEnabled(True); FWebView.setWebChromeClient( TJWebChromeClient.Create.onGeolocationPermissionsShowPrompt( origin: JString; callback: JGeolocationPermissions_Callback);..... FWebView.getSettings.setAppCacheEnabled(True); FWebView.getSettings.setDatabaseEnabled(True); FWebView.getSettings.setDomStorageEnabled(True); FWebView.getSettings.setBuiltInZoomControls(True); FWebView.getSettings.setDisplayZoomControls(False); FWebViewContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); FChildrenContainer := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FWebView, LayoutParams); LayoutParams := TJRelativeLayout_LayoutParams.JavaClass.init(TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT, TJViewGroup_LayoutParams.JavaClass.MATCH_PARENT); FWebViewContainer.addView(FChildrenContainer, LayoutParams); SetEnableCaching(True); end;  
    • От Денис Демин
      Здравствуйте, есть такая задача:
      1) Необходимо вставить карту от Яндекса на форму.
      2) Необходимо вставить информацию текстовую (информация о доставке или оплате), это можно также вставить HTML кодом, а лучше просто отформатированным содержанием. 
      Заранее спасибо всем за ответы.
    • От Edward Tarasov
      Привет всем. кто сталкивался с такой ерундой, что в webbrowser вместо сайта тупо белый экран?? причем сам сайт отображаеться норм, и на том же планшете, но в стандартном бразуере и на компе... и именно этот сайт не пашет из приложения
    • От Edward Tarasov
      Такая проблема... прога на андройд - два лэйаута в первом просто кнопки, во втором браузер. до тех пор пока второй лэйаут с браузером не открыли - кнопки в первом нажимаются - как только открыли браузер и закрыли его(visible:=false(и лэйаут и браузер)) кнопки в первом всеравно не нажимаются, как будто нажимаю на пустой лайаут, при том что сами кнопки на форме видно.
    • От fabiano Bom dia
      WebBrowser in front of the Multi View delphi android menu? how to solve?
       

    • От Rusland
      В ходе работы с js библиотекой leaflet столкнулся с проблемой некорректной работы стандартного веббраузера на виндоуз. 
      Как известно компонент Webbrowser в Windows использует движок Internet Explorer. Но, как выяснилось, по умолчанию он работает в режиме совместимости IE6, даже если у вас установлена гораздо более новая версия.
      Для того чтобы заставить его работать в нужно вам режиме требуется внести правку в реестр:
      HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BROWSER_EMULATION Project1.exe = (DWORD) 0x00002710 (значения см. ниже) где Project1.exe - это название вашего приложения, а значения параметр принимает следующие:
      Value Description 11001 (0x2AF9 Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 11000 (0x2AF8) IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11. 10001 (0x2711) Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive. 10000 (0x02710) Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10. 9999 (0x270F) Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 9000 (0x2328) Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9. Important  In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.   8888 (0x22B8) Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks. 8000 (0x1F40) Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8 Important  In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.   7000 (0x1B58) Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.  
      PS. лично мне помогло исправление ветки HKEY_CURRENT_USER и установка версии IE10
      link
    • От Rusland
      В Windows можно работать c javascript через execScript (см. FMX.WebBrowser.Win), а как "общаться" с js на Android? Мне нужно выполнять свои скрипты, передавать данные в переменные.
    • От Maximus
      Добрый день. Возникла проблема при декодировании HTML страницы. При попытке декодировать символ
      THTMLEncoding.HTML.Decode('&nbsp;'); получаю ошибку

      Не хотелось использовать обычную замену, думал использовать специальную функцию для этого, но не вышло... Это очередной баг или перед декодированием текст ещё как-то нужно подготовить?
    • От ivadimos
      Есть необходимость использовать js(php) код в делфи.
      Могу ли я каким-то образом просто подключать файлы, передавать в скрипт значение и получать ответ.
    • От R.is
      Добрый день после долгих попыток наконец то у меня хоть что то получилось.
      Загружаю данные из html таблицы в StringGrid в таблице 2 строки и 4 столбца 
      из них мне нужно вытащить текст, ссылку на него и картинку пока получается загрузить только текст.
      procedure TForm1.Button1Click(Sender: TObject); var i,j : Integer; Tab : Olevariant; begin Tab := Webbrowser1.OleObject.document.all.tags('table').item(0); for I := 0 to (Tab.rows.length - 1) do begin for j := 0 to (Tab.Rows.Item(i).Cells.Length - 1) do begin StringGrid1.Cells[j, i] := Tab.Rows.Item(i).Cells.Item(j).InnerText; button2.Caption:= StringGrid1.Cells[0,0]; listbox1.Items[i]:=StringGrid1.Cells[i,0]; end; end; end; Прошу помочь с загрузкой картинки и ссылки на объявления может есть другой вариант?  потому что код для VCL а мне нужно под FMX
  • Последние посетители   0 пользователей онлайн

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

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