Отображение 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>

person Marc Ster    schedule 28.05.2013    source источник


Ответы (7)


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

Тег объекта 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, чтобы открыть его с помощью 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. Вы можете создать постоянную ссылку здесь: https://docs.google.com/viewer. Таким образом, даже если вы измените файл PDF, он все еще будет работать

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

person Marc Ster    schedule 30.05.2013
comment
Я думаю, вы можете удалить &embedded=true в строке просмотра Google? Это требует от меня входа в систему, если я положил его туда. - person thedjaney; 18.10.2013
comment
«_system» - это то, что я хотел все время, и все пытались открыть файлы в браузере ... Большой палец вверх и отличный подробный ответ - person Erik Grosskurth; 23.12.2015

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

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

  2. НЕОБХОДИМО загрузить файл и использовать подключаемый модуль FileOpener для приложений Android Phonegap, как описано в этом ответе StackOverflow. Это либо откроет файл в установленной программе чтения PDF, либо предоставит пользователю выбор.

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

person EeKay    schedule 18.04.2014
comment
Очень красивое объяснение! - person Evers; 23.05.2014

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

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

Ответ Марка Стера очень исчерпывающий. Однако подход к открытию PDF-файла с помощью документов Google требует, чтобы пользователь вошел в систему со своей учетной записью 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');
person Clawish    schedule 30.05.2015

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

person lsolano    schedule 03.09.2013

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

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

    handleDocumentWithURL(function() { console.log('success'); }, function(error) { console.log('failure'); 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.

person SANAT    schedule 18.11.2015

Я попробовал это, имея скрипт в том же файле 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>
person SamDroid    schedule 28.05.2013
comment
попробовал это с тем же файлом, он не работает: / что-то еще важно? Я также установил права для плагина.. ничего не происходит, даже если я хочу вызвать функцию с готовым устройством - person Marc Ster; 28.05.2013
comment
У вас есть две активности в вашем манифесте Android? Вам нужно, чтобы он работал. Попробуйте вызвать функцию window.open в событии onclick. Например, onclick=window.open('любой URL-адрес') и дайте мне знать результат. Если это не сработает, выполните следующее: ссылка@MarcSter - person SamDroid; 29.05.2013
comment
что именно вы имеете в виду под двумя действиями в вашем манифесте Android? Я просто добавил эту строку разрешений: ‹plugin name=InAppBrowser value=org.apache.cordova.InAppBrowser/› в config.xml, как описано в API phonegap. - person Marc Ster; 29.05.2013
comment
@MarcSter: вы можете попробовать выполнить последний полный пример этой страницы PhoneGapApi и скажите, работает ли это? - person SamDroid; 29.05.2013
comment
Последний пример, по крайней мере, открывает программу просмотра PDF. Но внешний PDF-файл, который я хочу отобразить, не отображается. - person Marc Ster; 29.05.2013
comment
Он не открывается, также заменяя свой URL-адрес в примере? @МаркСтер - person SamDroid; 29.05.2013
comment
я попробовал этот код: function onDeviceReady() { // внешний URL-адрес var ref = window.open(encodeURI('i-drain.net/userfiles/file/einbauanleitung_iboard.pdf'), '_blank', 'location=yes'); // относительная ссылка на документ = window.open('indexE.html', '_self'); } он открывает inAppViwer, и я также могу нажать «Готово», чтобы вернуться на индексный сайт.. но pdf не отображается - person Marc Ster; 29.05.2013
comment
Вы добавили внешний сайт в свой белый список? Можете ли вы делать регулярные window.open() вызовы какой-либо случайной страницы (не .pdf) в этом домене? - person MBillau; 29.05.2013
comment
нормальная страница работает хорошо! Но pdf не работает ни снаружи, ни внутри. Спасибо большое за помощь! Действительно ценю это - person Marc Ster; 30.05.2013
comment
Погуглив, я обнаружил, что у Android нет средства просмотра PDF для их веб-просмотра, посмотрите на этот вопрос: GoogleDoc - person SamDroid; 30.05.2013
comment
даже видео на YouTube работают с InAppViewer. Существуют ли различия между форматами pds, которые работают? Я не знаю, что делать... - person Marc Ster; 30.05.2013
comment
@SamDroid, но разве это не фактическое использование InAppViewer, отображающего pdf? - person Marc Ster; 30.05.2013
comment
Если вы используете обычный браузер, вы можете скачать pdf, нажав на ссылку. Это возможно и в приложении phonegap? это было бы нормально.. - person Marc Ster; 30.05.2013
comment
Да, это возможно в phonegap, см. [Документацию] (docs .phonegap.com/en/2.7.0/) - person SamDroid; 30.05.2013
comment
Спасибо! Я успешно скачал PDF-файл по внешней ссылке. Я сохранил его в /sdcard... следующая проблема в том, как я могу сохранить его в месте, где пользователь может легко его найти? Плохая идея, если он должен искать его с помощью проводника. Могу ли я открыть его с помощью FileReader? Будет ли он отображать PDF-файл с установленной программой для чтения PDF-файлов? - person Marc Ster; 30.05.2013
comment
Это зависит от вас, некоторые PdfREader находят каждый pdf-файл в памяти, иначе нет другого способа найти его без поиска. - person SamDroid; 30.05.2013
comment
Phonegap Api FileReader говорит, что файлы могут быть прочитаны как текст или как строка с кодировкой данных base64. Я думаю, pdf не является текстом - person Marc Ster; 30.05.2013
comment
давайте продолжим это обсуждение в чате - person SamDroid; 30.05.2013