Перейти к содержанию

Вопросы

Есть мобильная версия сайта. Задача простая - открывать его в МП.

Положил TWebBrowser, который открывает сразу сайт, все ок..НО! не работает открытия pdf файлов по ссылке, если без МП - все ок - Chrome задает   вопрос - Скачать? и скачав открывает.. 

а тут - никак..

сложные решения ( типа поймать ссылку ПДФ, скачать самому, открыть через Интент - не нужно) там всякие разрешения полезут и т.д. Задача сделать "вечное" -  МП которое просто открывает сайт.. чтобы не продлевать лицензию и не напарываться на требования обновлять версию Дельфи ( то 64, то новый ИОС, то новые правила размещения.. ) 

Отредактировал Сергей Сергеев

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


Ссылка на сообщение

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

  • 0
9 минут назад, Slym сказал:

заголовки смотрел? может там честное Content-Disposition: attachment...

смущает, что просто в хроме то работает все.. а через TWebBrowser - не звонит по tel: . не емейлит по mailto:

но это решил перехватом и через интент..

но пдф принимать, сохранять.. не хочется.. 

Заголовки вот что разработчики сайта ответили:

Изначально было

    header("Content-Type: application/pdf");
    header("Content-Length: " . $_GET['size']);
    echo $recordPdf;


Т.е. отдавался полученный из ПДФ контент с корректным типом и браузер сам принимал решение, что с ним делать.

Для варианта открытия  из МП (с параметром MP в get строке) реализовали вариант с выдачей заголовков на принудительное сохранение файла

header("Content-Type: application/pdf");
header("Content-Length: " . $_GET['size']);
header("Content-Disposition: attachment; filename=\"card_record_".$_GET['id'].".pdf\"; filename*=utf-8''card_record_".$_GET['id'].".pdf");
header("Content-Transfer-Encoding: binary");
header("Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
header("Pragma: public");
echo $recordPdf;



В чистом баузере работает корректно, однако, в браузере в  МП ( моб. прил)не открывает и запрос на сохранение не вызывает.

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


Ссылка на сообщение
  • 0

Content-Disposition: inline?
или тогда может в сторону js копать https://ru.stackoverflow.com/questions/439058/Открыть-pdf-в-окне-браузера-ajax

Отредактировал Slym

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


Ссылка на сообщение
  • 0
37 минут назад, Slym сказал:

Content-Disposition: inline?
или тогда может в сторону js копать https://ru.stackoverflow.com/questions/439058/Открыть-pdf-в-окне-браузера-ajax

спасибо, попробуем..

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


Ссылка на сообщение
  • 0

вообщем поставил Андроид студию, по нескольким примерам сделал приложение из одного компонента WebView - и ведет оно себя также как Дельфи браузер, никаких tel:

mailTo: никаких просмотров pdf, также все надо писать вручную, перехватывая..

лучше уж тогда на Дельфи.. знакомей да и написано уш давно..

неожиданно.. все в коротких штанах..

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


Ссылка на сообщение
  • 0
1 час назад, Slym сказал:

http://www.ohandroid.com/pdf-x.html
пробовали ? 

браузером открывает по  https://docs.google.com/viewer?url='+ URL

 

просто если присвоить по клику на ссылке с пдф в событии ОнЛоад ТВэбБраузера - то ничего не происходит

если через таймер - открывает первый раз, потом опять ничего ( может это Докс Гугла блокирует повторные запросы..)

 

 

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


Ссылка на сообщение
  • 0

Все про ИОС.

В ходе теста, вернулся на Дельфи 10.3.3 и что? Все работает ( в ИОС), и звонит по тел:, и пдф вьювером своим открывает

Похоже в 10.4.1 поменяли твэббоаузер на этот кокоа ( который ещё и в симулятор забыли положить, в 3 3 все компилится кстати в симуляторе, запускается и падает на симуляторе пример вэббраузер). Буду на 3.3 пытаться выложить, в тест Флай проходит.

Отредактировал Сергей Сергеев

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


Ссылка на сообщение
  • 0

ну так вот .. в 10.4.1 в ИОС перешли на другой TWebBrowser

в итоге pdf не открывает, по телефону на странице не звонит.. хорошо 10.3.3. не снес еще.. успеть бы в АппСтор закинуть..

image.thumb.png.43fdea50f434a8c7c274fdac84a14068.png

 

https://www.embarcadero.com/ru/products/rad-studio/whats-new-in-10-4-sydney

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


Ссылка на сообщение

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

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

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

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

  Разрешено использовать не более 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;  
    • От Edward Tarasov
      Привет всем. кто сталкивался с такой ерундой, что в webbrowser вместо сайта тупо белый экран?? причем сам сайт отображаеться норм, и на том же планшете, но в стандартном бразуере и на компе... и именно этот сайт не пашет из приложения
    • От Edward Tarasov
      Такая проблема... прога на андройд - два лэйаута в первом просто кнопки, во втором браузер. до тех пор пока второй лэйаут с браузером не открыли - кнопки в первом нажимаются - как только открыли браузер и закрыли его(visible:=false(и лэйаут и браузер)) кнопки в первом всеравно не нажимаются, как будто нажимаю на пустой лайаут, при том что сами кнопки на форме видно.
    • От Alex Bakulin
      Для формирования страницы в WebBrowser использую LoadFromStrings
      Задача - добавить к странице скрипт на JS. Если я просто добавляю строку <script src="скрипт из сети"></script>, то он не срабатывает. В чем может быть проблема? 
    • От 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? Мне нужно выполнять свои скрипты, передавать данные в переменные.
    • От AlexTru
      Всем добрый день!
      Нужна очень ваша помощь.
      Проблема такая в при открытие виртуальной клавиатуры, перекрывается поле ввода в Webbrowsere.
      Подскажите как его сместить, чтобы было видно куда вводить данные.
      Примеры приведенные в уроках, я пробовал, поле ввода TEdit смещается а Webbrowser нет.
  • Последние посетители   0 пользователей онлайн

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

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