Перейти к содержанию
Fire Monkey от А до Я
  • 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
В 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 эмодзи.

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

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

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

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