【发布时间】:2019-06-01 07:58:31
【问题描述】:
我正在使用 ionic 3 构建一个 Android/iOS 应用程序,该应用程序仅包含一个由 cordova-plugin-inappbrowser(版本 3.0.0)提供的 web 视图和一个响应式主页。主页包含指向网站以及(在线)PDF 文件的不同链接。
据我所知,Android 中的 webview(我还没有尝试过 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、loadstop、loaderror)。使用通常的 URL,这些事件会按预期触发。 有没有其他方法可以拦截这些电话? (据我所知,这个版本中不存在 beforeload 事件)
感谢任何帮助/提示!
编辑:
我按照建议直接从 github master 安装了 cordova-plugin-inappbrowser。 据我所知,“前加载”通道是在模块中实现的。 但是'beforeload'事件仍然没有触发。 (但“loadstart”适用于非 PDF URL)。
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');
});
}
【问题讨论】:
标签: android cordova ionic-framework cordova-plugins inappbrowser