Обнаружить Pdf Reader в MsIE - PullRequest
       38

Обнаружить Pdf Reader в MsIE

3 голосов
/ 04 августа 2009

Я использую IFrame для просмотра PDF-документа, когда нажимается ссылка в этом IFrame. Однако на машинах без ридера ссылка предложит скачать. Есть ли способ, что та же самая ссылка может побудить пользователя загрузить читателя, когда он не обнаруживает читателя вместо этого? Я думал, что видел это где-то. Спасибо!

Ответы [ 4 ]

5 голосов
/ 12 августа 2009

Это работает для меня в IE:

<script>
var p;
try {
p = new ActiveXObject('AcroExch.Document');
}
catch (e) {
// active x object could not be created
document.write('doesnt look like the PDF plugin is installed...');
}
if (p) {
    document.write('does look like the pdf plugin is installed!');
}
</script>

Нашел его здесь. ..но изменил, чтобы удалить "endif"

3 голосов
/ 26 октября 2010

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

function hasPdfPlugin() {   
//detect in mimeTypes array
if (navigator.mimeTypes != null && navigator.mimeTypes.length > 0) {        
    for (i = 0; i < navigator.mimeTypes.length; i++) {
        var mtype = navigator.mimeTypes[i];
        if(mtype.type == "application/pdf" && mtype.enabledPlugin)
            return true;
    }
}

//detect in plugins array
if (navigator.plugins != null && navigator.plugins.length > 0) {
    for (i = 0; i < navigator.plugins.length; i++) {
        var plugin = navigator.plugins[i];
        if (plugin.name.indexOf("Adobe Acrobat") > -1
                || plugin.name.indexOf("Adobe Reader") > -1) {
            return true;
        }

    }
} 
// detect IE plugin
if (window.ActiveXObject) {
    // check for presence of newer object       
    try {
        var oAcro7 = new ActiveXObject('AcroPDF.PDF.1');
        if (oAcro7) {
            return true;
        }
    } catch (e) {
    }

    // iterate through version and attempt to create object 
    for (x = 1; x < 10; x++) {
        try {
            var oAcro = eval("new ActiveXObject('PDF.PdfCtrl." + x + "');");
            if (oAcro) {
                return true;
            }
        } catch (e) {
        }
    }

    // check if you can create a generic acrobat document
    try {
        var p = new ActiveXObject('AcroExch.Document');
        if (p) {
            return true;
        }
    } catch (e) {
    }

}

// Can't detect in all other cases
return false;
}
3 голосов
/ 12 августа 2009

Вот несколько сценариев , которые помогают обнаружить присутствие Acrobat.

1 голос
/ 12 августа 2009

В JavaScript вы можете сделать что-то вроде:

var adobePdfObject = new ActiveXObject("theAdobePdfCOMObject");

и затем либо перехватывает ошибку, либо возвращается значение adobePdfObject?

...