Post 刷新点击和自动重发数据的Firefox插件

Post 刷新点击和自动重发数据的Firefox插件,post,firefox-addon,reload,firefox-addon-sdk,page-refresh,Post,Firefox Addon,Reload,Firefox Addon Sdk,Page Refresh,我正在尝试制作一个firefox插件,在某些情况下它会自动重新加载页面 首先,我将contentScript添加到一个选项卡中,以便在我的插件中获取页面上的一些信息 tab.attach({ contentScript:self.port.emit... 我已经让它工作到刷新点了 tab.reload(); 但是,每次“如果它应该重新发送数据”,就会弹出一个警报 我想自动重新发送数据。 我在哪里怎么做?在加载项中还是在contentScript中? 这与加载标志常量有

我正在尝试制作一个firefox插件,在某些情况下它会自动重新加载页面

首先,我将contentScript添加到一个选项卡中,以便在我的插件中获取页面上的一些信息

tab.attach({
            contentScript:self.port.emit...
我已经让它工作到刷新点了

tab.reload();
但是,每次“如果它应该重新发送数据”,就会弹出一个警报

我想自动重新发送数据。 我在哪里怎么做?在加载项中还是在contentScript中?
这与加载标志常量有关吗?

当提示打开时,单击“接受”按钮。但是你会看到提示窗口,大约有几百毫秒

我不得不使用
setTimeout
和0等待时间,从另一个角度看,
aDOMWindow.args
属性和
aDOMWindow.Dialog
和一堆其他东西将是未定义的或空的。但这是可行的:

var stringBundle = Services.strings.createBundle('chrome://browser/locale/appstrings.properties');

try {
    windowListener.unregister();
} catch (ignore) {}

var windowListener = {
    //DO NOT EDIT HERE
    onOpenWindow: function(aXULWindow) {
        // Wait for the window to finish loading
        let aDOMWindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow);
        aDOMWindow.addEventListener('load', function() {
            aDOMWindow.removeEventListener('load', arguments.callee, false);
            windowListener.loadIntoWindow(aDOMWindow, aXULWindow);
        }, false);
    },
    onCloseWindow: function(aXULWindow) {},
    onWindowTitleChange: function(aXULWindow, aNewTitle) {},
    register: function() {
        // Load into any existing windows
        let XULWindows = Services.wm.getXULWindowEnumerator(null);
        while (XULWindows.hasMoreElements()) {
            let aXULWindow = XULWindows.getNext();
            let aDOMWindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow);
            windowListener.loadIntoWindow(aDOMWindow, aXULWindow);
        }
        // Listen to new windows
        Services.wm.addListener(windowListener);
    },
    unregister: function() {
        // Unload from any existing windows
        let XULWindows = Services.wm.getXULWindowEnumerator(null);
        while (XULWindows.hasMoreElements()) {
            let aXULWindow = XULWindows.getNext();
            let aDOMWindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow);
            windowListener.unloadFromWindow(aDOMWindow, aXULWindow);
        }
        //Stop listening so future added windows dont get this attached
        Services.wm.removeListener(windowListener);
    },
    //END - DO NOT EDIT HERE
    loadIntoWindow: function(aDOMWindow, aXULWindow) {
        if (!aDOMWindow) {
            return;
        }
        if (aDOMWindow.location == 'chrome://global/content/commonDialog.xul') {
            var repostString = stringBundle.GetStringFromName('confirmRepostPrompt');
            var repostStringFormatted = stringBundle.formatStringFromName('confirmRepostPrompt', [aDOMWindow.Application.name], 1);
            aDOMWindow.setTimeout(function() {
                console.log('setimeout val 00:', aDOMWindow.args)
                    //aDOMWindow.args and aDOMWindow.Dialog is not available till after setTimeout of 0 so weird
                if (aDOMWindow.args.text == repostString || aDOMWindow.args.text == repostStringFormatted) {
                    console.log('this is resend prompt so accept it');
                    //aDOMWindow.Dialog.ui.button0.click(); //doesnt work
                    //aDOMWindow.Dialog.onButton0(); // doesnt work
                    //aDOMWindow.ondialogaccept(); //doesnt work
                    var dialog = aDOMWindow.document.getElementById('commonDialog');
                    var btnAccept = aDOMWindow.document.getAnonymousElementByAttribute(dialog, 'dlgtype', 'accept');
                    btnAccept.click();
                    console.log('clicked');
                }
            }, 0);
        }

    },
    unloadFromWindow: function(aDOMWindow, aXULWindow) {
        if (!aDOMWindow) {
            return;
        }
    }
};

windowListener.register();

打开草稿行。将环境设置为浏览器。运行代码。刷新页面以获得提示,您将看到它被单击。

您是否可以复制粘贴提示上的内容,我无法显示该弹出窗口,但一旦我有了它的文本,我可以在mxr上查找它。不确定它是否有帮助,因为它是德语:我可以点击“Ernut senden”和“abbrechen”“这很有帮助,谢谢,好吧,这个东西是从这个cpp文件中调用的:所以我们必须在这里查找一些东西,所以乍一看,如果你将LOAD_CMD_RELOAD标志从loadType中删除,它不会发出消息,但它会搞乱其他东西,所以我们不想这样做。哦,好的,谢谢。我发现了这个链接,它看起来是在谈论同样的事情,但问题是,它关闭了“确认弹出窗口”。哦,还有一件事我想了一下。是否可以从ff插件中“单击”确认?我也不知道该怎么做。(我只找到了如何制作弹出窗口,而没有找到如何操作它)