Я создаю приложение для Android / iOS с ionic 3, которое просто состоит из веб-просмотра cordova-plugin-inappbrowser (версия 3.0.0) и адаптивной домашней страницы. Домашняя страница содержит различные ссылки на веб-сайты, а также на (онлайн) файлы PDF.
Как я узнал, веб-просмотр в Android (я еще не пробовал iOS) не поддерживает открытие PDF-файлов.
Вот почему я хотел перехватить вызываемые URL-адреса и открыть их другим способом, если они заканчиваются на «.pdf»:
import { Component } from '@angular/core';
import {InAppBrowser, InAppBrowserObject, InAppBrowserOptions} from "@ionic-native/in-app-browser";
export class HomePage {
options : InAppBrowserOptions = {
location : 'no',//Or 'no'
hidden : 'no', //Or 'yes'
clearcache : 'yes',
clearsessioncache : 'yes',
zoom : 'no',//Android only ,shows browser zoom controls
hardwareback : 'yes',
mediaPlaybackRequiresUserAction : 'no',
shouldPauseOnSuspend : 'no', //Android only
closebuttoncaption : 'Close', //iOS only
disallowoverscroll : 'no', //iOS only
toolbar : 'no', //iOS only
enableViewportScale : 'no', //iOS only
allowInlineMediaPlayback : 'no',//iOS only
presentationstyle : 'pagesheet',//iOS only
fullscreen : 'yes'//Windows only
};
constructor(private inAppBrowser: InAppBrowser) {
this.openWithCordovaBrowser('http://url.tohomepage.com');
}
public openWithCordovaBrowser(url : string){
let target = "_self";
this.browser = this.inAppBrowser.create(url,target,this.options);
this.browser.on('loadstart').subscribe((event) => {
if(event.url.endsWith('.pdf'))
{
//Open PDF in some other way
}
});
this.browser.on('loadstop').subscribe((event) => {
});
this.browser.on('exit').subscribe((event) => {
});
}
}
Моя проблема сейчас заключается в том, что при вызове PDF-URL ни одно из 3 событий (loadstart, loadtop, loaderror) не запускается. С обычным URL эти события запускаются, как и ожидалось.
Есть ли другой способ перехватить эти звонки? (Насколько я вижу, в этой версии не существует события beforeload)
Спасибо за любую помощь / подсказки!
EDIT:
Я установил cordova-plugin-inappbrowser прямо из мастера github, как и предлагалось.
Насколько я вижу, в модуле реализован канал beforeload.
Но событие beforeload все еще не запускается. («loadstart», тем не менее, работает для URL-адресов без PDF).
declare var cordova: any;
...
constructor() {
var iabRef = cordova.InAppBrowser.open("http://someurl.com", "_blank", "beforeload=yes");
iabRef.addEventListener('beforeload', function(params, callback){
alert('Beforeload fired');
// If the URL being loaded is a PDF
if(params.url.match(".pdf")){
// Open PDFs in system browser (instead of InAppBrowser)
cordova.inAppBrowser.open(params.url, "_system");
}else{
// Invoke callback to load this URL in InAppBrowser
callback(params.url);
}
});
iabRef.addEventListener('loadstart', function(params, callback){
alert('Loadstart fired');
});
}