PhoneGap InAppBrowser дисплей pdf 2.7.0

Я хочу отобразить внешний PDF-файл с помощью телефонного промежутка InAppBrowser в Android, но он не работает.

Это мой код JS:

<script>
function openPDF() {
     var ref = window.open('http://www.i-drain.net/userfiles/file/einbauanleitung_iboard.pdf', '_blank', 'location=yes');
     ref.addEventListener('loadstart', function(event) { alert('start: ' + event.url); });
     ref.addEventListener('loadstop', function(event) { alert('stop: ' + event.url); });
     ref.addEventListener('loaderror', function(event) { alert('error: ' + event.message); });
     ref.addEventListener('exit', function(event) { alert(event.type); });
}


</script>

Я хочу открыть PDF после нажатия на изображение, поэтому я использую этот HTML-код:

 <a href="#" onclick="openPDF()" >
   <img src="images/button.png">
 </a>

8 ответов

Решение

Для всех, кто застрял в этой проблеме, вот что я наконец-то узнал:

HTML 5 тег объекта: не работает

Встроенный тег: не работает

Плагин childBrowser: я думаю, что он будет работать, но он предназначен для версии 2.0.0. Таким образом, вы получите много ошибок, поэтому я не получил его на работу.

PhoneGap InAppViewer: если вы используете его так:

window.open('http://www.example.com/test.pdf', '_blank', 'location=yes')

это не сработает. InAppViewer не может открыть PDF, не имеет значения, является ли PDF внешним или локальным.

Мои решения до сих пор (не то, что было реальной идеей):

Вы можете вызвать оконную функцию с помощью _system. как это:

window.open('http://www.example.com/test.pdf', '_system', 'location=yes')

это откроет PDF в обычном браузере и загрузит его. После загрузки он спросит, следует ли открыть его в программе просмотра PDF. Но вы должны вернуться к своему приложению и открыть его снова после этого.

Другая возможность - просто загрузить ее на свою SD-карту с помощью API-интерфейса файловой системы Phonegap:

var fileTransfer = new FileTransfer();
fileTransfer.download(
"http://developer.android.com/assets/images/home/ics-android.png",
"file://sdcard/ics-android.png",
function(entry) {
    alert("download complete: " + entry.fullPath);
},
function(error) {
    alert("download error source " + error.source);
    alert("download error target " + error.target);
    alert("upload error code" + error.code);
});

Последнее, что я обнаружил, - это используйте Google docs/drive, чтобы открыть его с помощью InAppViewer, связанной с такими документами Google:

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {

window.open('https://docs.google.com/viewer?url=http://www.example.com/test.pdf&embedded=true', '_blank', 'location=yes'); 
ref = window.open('index.html', '_self');
 }

Это откроет PDF в приложении, просматривая его в Google Docs. Вы можете создать свою постоянную ссылку здесь: https://docs.google.com/viewer Поэтому, даже если вы измените свой PDF-файл, он все равно будет работать

Я надеюсь, что это резюме поможет вам сэкономить время. Если есть другое решение, дайте мне знать

Android не имеет встроенной функции просмотра PDf в своем браузере (в отличие от iOS Safari). Насколько я вижу, есть два приятных варианта:

  1. Полностью пропустите загрузку и покажите PDF-файл с помощью возможностей онлайн-просмотра Google Doc Viewer, как указано в этом ответе Stackru

  2. Загрузите файл и используйте плагин FileOpener для приложений Android Phonegap, как описано в этом ответе Stackru. Это откроет файл в установленном PDF-ридере или предоставит пользователю выбор.

Я написал кое-что о загрузке и показе PDF на iOS, и эти опции я показал в своем блоге для разработчиков Android Phonegap.

Попробуйте, таким образом, это будет работать.

var ref = window.open('http://docs.google.com/viewer?url=http://www.i-drain.net/userfiles/file/einbauanleitung_iboard.pdf', '_system', 'location=yes');

Ответ Марка Стера очень исчерпывающий. Тем не менее, подход к открытию PDF-файла в Google Docs требует от пользователя входа в систему с помощью своей учетной записи Google.

Если вы отображаете PDF-файлы, которые находятся на вашем собственном сервере, вы можете избежать этого и использовать следующий подход: Вы можете настроить библиотеку PDF.js на своем сервере. Это проект с открытым исходным кодом, на котором также основаны документы Google для просмотра PDF-файлов в веб-браузере.

Затем вы можете использовать плагин InAppBrowser, чтобы перейти на ваш сервер, где находится файл PDF.js, указав путь для отображения PDF в URL. PDF также должен быть на вашем сервере, чтобы избежать проблем с CORS. Если это внешний PDF, вы можете написать обходной путь, как указано здесь.

Вы можете отобразить клиентскую часть PDF с кодом, подобным этому (используя плагин InAppBrowser)

var fileName = "myPdfOnMyServer.pdf";
var url = encodeURIComponent('files/uploads/' + fileName);
var ref = window.open(
         'https://www.<my website>.com/pdfjs-1.0.10XX-dist/web/viewer.html?file='
         + url,
         '_blank',
         'location=no,closebuttoncaption=Close,enableViewportScale=yes');

Android-веб-просмотр не имеет встроенного средства просмотра PDF. Пример перенаправления пользователя в Google Doc Viewer: http://docs.google.com/viewer?url=http://example.com/example.pdf

Попробуйте открыть все документы из URL, выполнив следующие действия:

  • установить этот плагин: плагин cordova добавить https://github.com/ti8m/DocumentHandler
  • используйте этот код:

    handleDocumentWithURL (function () {console.log ('success');}, function (error) {console.log ('fail'); if (error == 53) { console.log('Нет приложения, которое обрабатывает этот файл type. ');}},' http://www.example.com/path/to/document.pdf');

У меня это работает как на Android, так и на IOS. Я использовал его для открытых изображений и файлов PDF.

Android: он открывает файлы с помощью системных приложений, если таковые имеются, в противном случае выдает ошибку, с которой вы можете справиться.

IOS: открывает файлы в виде всплывающих окон, например, с помощью кнопки "Готово" и кнопки "Параметры"

Он не показывает URL ваших документов.

Источник доступен здесь: https://github.com/ti8m/DocumentHandler

function openPDF() {
     var ref = window.open('http://docs.google.com/viewer?url=http://www.i-drain.net/userfiles/file/einbauanleitung_iboard.pdf', '_system', 'location=yes');
     ref.addEventListener('loadstart', function(event) { alert('start: ' + event.url); });
     ref.addEventListener('loadstop', function(event) { alert('stop: ' + event.url); });
     ref.addEventListener('loaderror', function(event) { alert('error: ' + event.message); });
     ref.addEventListener('exit', function(event) { alert(event.type); });
}

Я попробовал, используя скрипт в том же файле HTML, и он работал для меня, единственное изменение заключалось в том, что я добавил атрибут "alt" на изображение:

 <html lang="en">

    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <a href="#" onclick="openPDF()" >
   <img alt="aaa" src="images/button.png">
 </a>
    </body>
</html>
<script>
function openPDF() {
     var ref = window.open('http://www.i-drain.net/userfiles/file/einbauanleitung_iboard.pdf', '_blank', 'location=yes');
     ref.addEventListener('loadstart', function(event) { alert('start: ' + event.url); });
     ref.addEventListener('loadstop', function(event) { alert('stop: ' + event.url); });
     ref.addEventListener('loaderror', function(event) { alert('error: ' + event.message); });
     ref.addEventListener('exit', function(event) { alert(event.type); });
}


</script>
Другие вопросы по тегам