Я работаю над расширением 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, который вставляется на страницу?