代码之家  ›  专栏  ›  技术社区  ›  darbid

如何获取Chrome扩展以从iframe获取Javascript变量(dropzone)

  •  0
  • darbid  · 技术社区  · 5 年前

    我正在做一个铬合金的扩展。我想将一个文件添加到具有 dropzone on it.

    例如,可以在开发人员控制台中使用

    document.body.dropzone.addfile(file);
    

    我了解到扩展不能访问变量,比如在本例中的dropzone对象。所以我想我可以通过遵循 many examples like this one 我使用自定义事件的地方。我的代码仍然非常相似;

    在my 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);
    

    自定义事件.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);
    

    事件已调度。 为了检查所有东西是否正确连接,我将detail改为字符串,content.js将字符串设置为ok。

    所以问题是我不能传递一个对象。有人知道为什么吗?

    0 回复  |  直到 5 年前