• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Fehlenden Bezug zur WebViewer-Instanz für nachträglich definiertes und zu ladendes Dokument herstellen

petrei86

Mitglied
Hallo Leute

Ich versuche mich mal wieder mit Javascript, komme aber einfach nicht weiter.
Ich erstelle die Instanz WebViewer und weise diese dem DOM WinRight zu. Danach setze ich mit .then noch das Theme und die Sprache. Soweit funktioniert das alles.


Javascript:
        WebViewer({
            path: '_PlugIn/PdfJsExpress/lib',
            licenseKey: 'xxx',
            disabledElements: [
                'themeChangeButton',
                'fullscreenButton',
                'languageButton'
            ]
        }, document.getElementById('WinRight'))
        .then(instance => {
            instance.UI.setTheme('dark');
            instance.UI.setLanguage('de');   
        });

würde ich nun direkt nach der Sprache noch folgendes einfügen, würde auch das funktionieren.

Javascript:
instance.UI.loadDocument(base64ToBlob('xxxxxxxxxxxxxxxxxxxxxx'), { filename: 'abc.pdf' });

--
Stattdessen will ich aber das zu ladende Dokument nachträglich definieren.

Javascript:
        $(document).on('click', '.Record', function() {
            var FileId = $(this).attr("DocId");           
            $.post("_Action/LoadData.php", { Action:'File', FileId }, function(Feedback) {
                 instance.UI.loadDocument(base64ToBlob(Feedback['FileString']), { filename: Feedback['FileName'] });
            });
        });

Nun fehlt Ihm aber der Bezug zur Instanz WebViewer - Wie stelle ich diesen nun korrekt her?

Danke für eure Hilfe
petrei86
 

Charly1410

Neues Mitglied
Hallo @petrei86, deine Frage liegt zwar schon ein paar Tage zurück aber ich will trotzdem versuchen, sie zu beantworten. Ich sehe hier mehrere Möglichkeiten, das Problem zu lösen:

1. Speichere eine Promise auf die instance in einer globalen Variablen und hole die instance später bei Bedarf heraus:
Code:
        const promWebViewer = WebViewer({
            path: '_PlugIn/PdfJsExpress/lib',
            licenseKey: 'xxx',
            disabledElements: [
                'themeChangeButton',
                'fullscreenButton',
                'languageButton'
            ]
        }, document.getElementById('WinRight'))
            .then(instance => {
                instance.UI.setTheme('dark');
                instance.UI.setLanguage('de');
                // Die Instanz des Webviewers zurück geben,
                // damit sie in der Promise zur Verfügung steht.
                return instance;
            });

        $(document).on('click', '.Record', function () {
            var FileId = $(this).attr("DocId");
            $.post("_Action/LoadData.php", { Action: 'File', FileId }, function (Feedback) {
                // Wir holen die Instanz des Webviewers aus der Promise:
                promWebViewer.then(instance => {
                    // Hier steht jetzt die Instanz zur Verfügung
                    // und wir können damit arbeiten:
                    instance.UI.loadDocument(base64ToBlob(Feedback['FileString']),
                        {
                            filename: Feedback['FileName']
                        });
                });
            });
        });

2. Alles was die instance benötigt, im then-Callback erledigen:
Code:
        WebViewer({
            path: '_PlugIn/PdfJsExpress/lib',
            licenseKey: 'xxx',
            disabledElements: [
                'themeChangeButton',
                'fullscreenButton',
                'languageButton'
            ]
        }, document.getElementById('WinRight'))
            .then(instance => {
                instance.UI.setTheme('dark');
                instance.UI.setLanguage('de');
                $(document).on('click', '.Record', function () {
                    var FileId = $(this).attr("DocId");
                    $.post("_Action/LoadData.php", { Action: 'File', FileId }, function (Feedback) {
                        instance.UI.loadDocument(base64ToBlob(Feedback['FileString']),
                            {
                                filename: Feedback['FileName']
                            });
                    });
                });
            });

3. Mit async-await arbeitn.

Weil ich WebViewer nicht zur Verfügung hatte, ist der Code ungetestet.
 
Werbung:
Oben