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

Запретить переход другим страницам.

Вопрос

Хочу при клике на любую ссылку в веб браузере (TWebBrowser) программа спрашивала чем его открыть (то есть спрашивал открыт посторонними программами которые установлены на телефоне). Как это реализовать? Страницу я загружаю со строки... Платформа Android и ios.

Изменено пользователем Axbor
Поправил заголовок

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


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

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

  • 0

в windows команда shellexec подается с параметром open и система выбирает ассоциированную с этим файлом программу

в Android все абсолютно так же. в ios весьма похоже

если есть несколько зарегистрированных программ, то будет выведен диалог...

http://stackoverflow.com/questions/26484766/open-url-in-xe6-firemonkey-ios-delphi

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 часа назад, krapotkin сказал:

в windows команда shellexec подается с параметром open и система выбирает ассоциированную с этим файлом программу

в Android все абсолютно так же. в ios весьма похоже

если есть несколько зарегистрированных программ, то будет выведен диалог...

http://stackoverflow.com/questions/26484766/open-url-in-xe6-firemonkey-ios-delphi

Я знаю это.

Не знаю куда всё это записать...

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
20 минут назад, krapotkin сказал:

а как выглядит ссылка в тексте?

Вы наверно не поняли... Ссылка находится на WebBrowser. Я на WebBrowser загружаю через LoadFromStrings HTML страницу. И если на странице есть ссылка, он должен открываться встроенной программой..

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


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

Вижу у WebBrowser есть событие ShouldStartLoadWithRequest... Наверно это то что мне нужно... Но не знаю как сказать ему нельзя это сделать....

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


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

Может более широко описать задачу? Мне кажется, что Ваша задача решается удобнее другим способом.

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 7/19/2016 в 13:50, Pax Beach сказал:

Может более широко описать задачу? Мне кажется, что Ваша задача решается удобнее другим способом.

 

Так, у меня есть некоторый html контент (в этом контенте могут быть ссылки, рисунки и т.д.). Я отображаю этот контент на TWebBrowser. Проблема в том что при нажатии на ссылки этот браузер просто переходит по ссылке и приложение теряет свой смысл. Вот я хочу что бы при клике на любую из ссылок переход по ссылке не выполнялось и просило открыть эту ссылку на встроенных программах (открытие ссылки через встроенных программ я знаю). ShouldStartLoadWithRequest в этом событии приходит адрес нажатой ссылки. Но как запретит самому TWebBrowser у перейти по этой ссылке?

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


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

Вот о чем я и говорил. У вас своя HTML страница, Вы можете свои ссылки формировать для разных типов контента разные протоколы. Например, для картинок ссылки будут img://image01.jpg, тогда как обычные ссылки будут выглядеть как http://www.ru.

Скайп как-то перехватывает ссылки со своим протоколом call-to:. В прошлой жизни знал, как это делать, а теперь забыл. Но предлагаю, Вам подойти к этому вопросу с этой стороны.

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, Pax Beach сказал:

Вот о чем я и говорил. У вас своя HTML страница, Вы можете свои ссылки формировать для разных типов контента разные протоколы. Например, для картинок ссылки будут img://image01.jpg, тогда как обычные ссылки будут выглядеть как http://www.ru.

Скайп как-то перехватывает ссылки со своим протоколом call-to:. В прошлой жизни знал, как это делать, а теперь забыл. Но предлагаю, Вам подойти к этому вопросу с этой стороны.

 

Это не то о чем я спрашиваю... я просто хочу чтобы webbrowser не загружал никакую страницу при клике! Вот и всё.. 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
8 часов назад, Axbor сказал:

Это не то о чем я спрашиваю... я просто хочу чтобы webbrowser не загружал никакую страницу при клике! Вот и всё.. 

ОК. Ну так, как контент страницы Вы формируете самостоятельно, то для таких ссылок можно выкинуть теги <a>. А если нужно, чтобы оставшийся текст выглядел как ссылка, нужно использовать вместо указанного тега стили style="...".

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, Pax Beach сказал:

ОК. Ну так, как контент страницы Вы формируете самостоятельно, то для таких ссылок можно выкинуть теги <a>. А если нужно, чтобы оставшийся текст выглядел как ссылка, нужно использовать вместо указанного тега стили style="...".

 

Зачем так заморочится?! У TWebBrowser есть событие ShouldStartLoadWithRequest там приходит URL (нажатая ссылка). Я запрашиваю у пользователя открыть эту ссылку встроенной программой, но TWebBrowser тоже открывает в это время ту ссылку. Я хочу что бы TWebBrowser не открывал это! Вот и всё.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, Axbor сказал:

Зачем так заморочится?! У TWebBrowser есть событие ShouldStartLoadWithRequest там приходит URL (нажатая ссылка). Я запрашиваю у пользователя открыть эту ссылку встроенной программой, но TWebBrowser тоже открывает в это время ту ссылку. Я хочу что бы TWebBrowser не открывал это! Вот и всё.

ну тогда только так как-то, через костыли:

procedure TForm1.WebBrowser1DidFinishLoad(ASender: TObject);
begin
  cannotloadlinks := true;
end;

procedure TForm1.WebBrowser1DidStartLoad(ASender: TObject);
begin
  if cannotloadlinks and (WebBrowser1.URL <> Edit1.Text) then
  begin
    WebBrowser1.Stop;
    WebBrowser1.URL := Edit1.Text;
    WebBrowser1.Navigate;
  end
  else
    Edit1.Text := WebBrowser1.URL;
end;

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 минуты назад, Pax Beach сказал:

ну тогда только так как-то, через костыли:


procedure TForm1.WebBrowser1DidFinishLoad(ASender: TObject);
begin
  cannotloadlinks := true;
end;

procedure TForm1.WebBrowser1DidStartLoad(ASender: TObject);
begin
  if cannotloadlinks and (WebBrowser1.URL <> Edit1.Text) then
  begin
    WebBrowser1.Stop;
    WebBrowser1.URL := Edit1.Text;
    WebBrowser1.Navigate;
  end
  else
    Edit1.Text := WebBrowser1.URL;
end;

 

Спасибо попробую...

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
void __fastcall TContentViewForm::WebBrowser1ShouldStartLoadWithRequest(TObject *ASender,
          const UnicodeString URL)
{
	OpenURL(URL);
	WebBrowser1->Stop();
}
//---------------------------------------------------------------------------

если на странице нет картинок, то этот вариант работает...

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
26 минут назад, Axbor сказал:

void __fastcall TContentViewForm::WebBrowser1ShouldStartLoadWithRequest(TObject *ASender,
          const UnicodeString URL)
{
	OpenURL(URL);
	WebBrowser1->Stop();
}
//---------------------------------------------------------------------------

если на странице нет картинок, то этот вариант работает...

OpenURL(URL) — это метод какого класса?

И про какую OS идет речь? В win32 событие ShouldStartLoadWithRequest срабатывает только при вызове WebBrowser1.ShouldStartLoading.

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, Pax Beach сказал:

OpenURL(URL) — это метод какого класса?

И про какую OS идет речь? В win32 событие ShouldStartLoadWithRequest срабатывает только при вызове WebBrowser1.ShouldStartLoading.

 

Это собственная функция... Платформа Андроид.

procedure OpenURL(URL : string);
var   Intent: JIntent;
begin
  Intent := TJIntent.Create;
   Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
   Intent.setData(StrToJURI(URL));
   TAndroidHelper.Activity.startActivity(Intent);
end;

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 20.07.2016 в 11:17, Pax Beach сказал:

И про какую OS идет речь? В win32 событие ShouldStartLoadWithRequest срабатывает только при вызове WebBrowser1.ShouldStartLoading.

А почему в Windows не срабатывает этот вариант при обычном Navigate?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
9 часов назад, Rusland сказал:

А почему в Windows не срабатывает этот вариант при обычном Navigate?

Я не большой знаток этого компонента. Просто поверил, в Windows это событие не срабатывает при навигации.

 

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


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

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

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

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

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

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

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

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

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


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

    • От Anasazi
      Доброго времени суток! Есть приложение в котором используется TWebbrowser, хотел сделать чтобы при свайпе справа-налево выполнялся WebBrowser.GoBack, но обнаружил что жесты работают везде кроме TWebbrowser. Подскажите пожалуйста есть ли какое-либо решение этой проблемы? RAD Studio Berlin Update 1.
    • От 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?

    • От cs_diehard
      Открываю сайт
      WebBrowser1->URL = "https://www.youtube.com";
      Все открывается только видео не проигрывается в чем проблема?
      какие то плагины нужны помоему или как настроить помогите пожалуйста.. заранее благодарен!
    • От Axbor
      Я загружаю на TWebBrowser HTML страницу (там есть ссылки, рисунки, всё что угодно). И при клике на любую ссылку запрашиваю у пользователя открыть эту ссылку другим приложением следующим образом:
      void __fastcall TContentViewForm::WebBrowser1ShouldStartLoadWithRequest(TObject *ASender, const UnicodeString URL) { OpenURL(URL); WebBrowser1->Stop(); } //--------------------------------------------------------------------------- procedure OpenURL(URL : string); var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setData(StrToJURI(URL)); TAndroidHelper.Activity.startActivity(Intent); end; Проблема заключается в следующем, WebBrowser1->Stop(); останавливает загрузку текущей страницы (т.е. картинки на странице не открываются до конца). Я хочу что бы оно продолжалось....
    • От Axbor
      Как запретить масштабирование WebBrowser?
    • От rareMax
      В общем проверьте - у вас тоже будет ошибка вылетать если использовать TWebBrowser на TFrame?
      Вылетает ошибка: 
       TWebBug.7z
       
      Если кто то столкнется с этим багом - создавайте динамически TWebBrowser на фрейме - тогда нормально все.
       
      В общем, если кто то сталкивался с этим, и знает как обойти - скажите плиз
       
      Обходим так:
      Во время создания:

      constructor TFrame1.Create(AOwner: TComponent); begin inherited; fWeb := TWebBrowser.Create(Self); end; После того, как форма создана(событие OnShow)
      procedure TFrame1.OpenURL(const URL: String); begin   fWeb.Parent := Self;   fWeb.Align := TAlignLayout.Client;   fWeb.Navigate(URL); end;
    • От ivadimos
      Просто разместил на фрейм компонент, при создании фрейма вылетает ошибка.В XE8 подобной ошибки не наблюдалось
      Новый точечный рисунок.bmp
    • От kami
      Доброго времени суток, коллеги!
       
      Пришлось несколько изменить код стандартного модуля FMX.WebBrowser.iOS для корректной работы при загрузке локальных файлов.
      Вопрос: какие действия надо предпринять, чтобы изменения подхватывались приложениями без дополнительных телодвижений? В VCL это делалось достаточно просто - меняем pas на нужный, подключаем путь в SearchPath, пытаемся скомпилировать, после чего получившийся dcu заменяем в /lib и убираем путь из SearchPath.
       
      Предыстория (не обязательно к прочтению):
      Несколько недель я бился над проблемой вылета приложения при работе с WebBrowser.Navigate(local_file_path). Вылетало далеко не всегда, но удалось выявить закономерность и после долгих мучений, я нашел виновника торжества - метод TiOSWebBrowserService.DoNavigate(...). В нем проводились хитрые манипуляции с пересборкой URL, которые иногда приводили к nil в одной из переменных. Через десятые руки и внутренности iOS это все передавалось в TiOSWebViewDelegate.webView, где и возникало исключение. До метода TiOSWebViewDelegate.webView(webView: UIWebView;  didFailLoadWithError: NSError); дело даже не доходило, call stack виновника, само собой, не показывал.
       
      Кому интересно, что получилось (не гарантирую идеальность кода) на XE7 Update1:
      Простите, кнопка "код" почему-то удаляет весь код при сохранении сообщения, несколько раз пробовал. Пришлось воспользоваться "цитатой". А цитирование удаляет некоторые строки из кода...
      Update: видимо, движку форума не нравятся два слеша, которые используются в этом коде. Пришлось удалить код...
  • Последние посетители   0 пользователей онлайн

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

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