Как получить расширение Chrome, чтобы получить переменную Javascript (dropzone) из iframe - PullRequest
0 голосов
/ 08 июня 2019

Я работаю над расширением Chrome. Я хочу добавить файл на веб-страницу, на которой есть dropzone.

Это можно сделать, например, в консоли разработчика с помощью

document.body.dropzone.addfile(file);

Я узнал, что расширения не имеют доступа к переменным, таким как в этом случае объект dropzone. Поэтому я подумал, что смогу решить эту проблему, следуя множеству примеров , подобных этому , где я использую пользовательское событие. Мой код все еще очень похож;

В моем content.js

               //!!!!we are in a frame so doc is needed. Not using main document.
                var s = doc.createElement('script');
                s.src = chrome.extension.getURL('CustomEvent.js');
                (doc.head || doc.documentElement).appendChild(s);
                s.onload = function () {
                    s.remove();
                };

                // Event listener
                doc.addEventListener('RW759_connectExtension', function (e) {
                    // e.detail contains the transferred data (can be anything, ranging
                    if (!e.detail) {
                        console.log('addFile - failed to get the e.detail object.');

                    return  // this is where I end up no detail object.
                    }

                    e.detail.addFile(upFile);

CustomEvent.js

setTimeout(function () {
    console.log('in the time out');
    let dz = document.body.dropzone;
                if (!dz) {
                    console.log('addFile - failed to get the dropzone object.');
                }
    /* Example: Send data from the page to your Chrome extension */
    document.dispatchEvent(new CustomEvent('RW759_connectExtension', {
        detail: dz
    }));
}, 10);

В функции тайм-аута я могу получить объект dropzone. Событие отправлено. Content.js получает событие, но детализация не указана. Чтобы проверить, все ли правильно, я изменил детализацию на строку, и мой content.js получает строку в порядке.

Так что проблема в том, что я не могу передать объект. Кто-нибудь знает почему?

В качестве альтернативы я могу передать свой файл на веб-страницу каким-либо другим способом, в сценарий или в мой customevent.js, который вставляется на страницу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...