【问题标题】:On-demand popup in a Crossrider extensionCrossrider 扩展中的按需弹出窗口
【发布时间】:2015-01-07 04:49:35
【问题描述】:

我正在寻找一种在 Crossrider 扩展中显示按需弹出的方法,与 Javascript 的“确认”对话框相同。我在资源中有一个 HTML 页面,我想在弹出窗口中使用它,每当发送特定消息时都会显示该页面。我意识到有在 Crossrider (appAPI.browserAction.setPopup) 中显示弹出窗口的功能,但是我想按需显示自定义弹出窗口,而不是简单的 JS“确认”对话框。有没有办法做到这一点?谢谢。

【问题讨论】:

    标签: crossrider


    【解决方案1】:

    您可以使用appAPI.browserAction.setPopupappAPI.browserAction.clearPopup 的组合来控制弹出窗口。在以下示例中,扩展范围代码根据访问的页面确定需要哪个弹出窗口并进行相应设置:

    extension.js

    appAPI.ready(function($) {
        if (appAPI.isMatchPages("*google", "*msn")) {
            // Send message to background to set the popup based on the page url
            appAPI.message.toBackground({
                request: 'set-popup',
                popup: (location.hostname.indexOf('google') !== -1)
                    ? 'google.html'
                    : 'msn.html'
            });
        } else {
            // Send message to background to clear the popup for other pages
            appAPI.message.toBackground({
                request: 'clear-popup'
            });
        }
    });
    

    background.js

    appAPI.ready(function($) {
        appAPI.browserAction.setResourceIcon('icon.jpg');
        appAPI.message.addListener(function(msg) {
            switch(msg.request) {
                case 'set-popup':
                    // When setting the page, first clear the existing popup
                    appAPI.browserAction.clearPopup();
                    // then set the new popup
                    appAPI.browserAction.setPopup({
                        resourcePath: msg.popup,
                        width: 300,
                        height: 200
                    });
                    break;
                case 'clear-popup':
                    appAPI.browserAction.clearPopup();
                    break;
            }
        });
    });
    

    [披露:我是 Crossrider 的员工]

    【讨论】:

    • 我尝试了代码,但看起来并没有显示实际的弹出窗口。我确保在 background.js 中接收到消息“set-popup”,但没有显示来自资源的实际弹出窗口(添加了一个页面 MyPopup.html)。 appAPI.browserAction.setPopup 是否实际显示弹出窗口或仅设置弹出窗口属性?我可以在不单击扩展程序的浏览器按钮的情况下触发弹出窗口吗?谢谢。
    • 我实际上找到了一种解决方法。我最终在 extension.js 中创建了自己的自定义 DIV,并在需要时将其用作弹出窗口。这不是最漂亮的解决方案,但到目前为止似乎有效。感谢您的帮助。
    • 感谢您的更新。关于 browserAction 弹出窗口,根据定义,它是一个按钮,因此仅在单击按钮时显示。从您的第二个回复来看,您似乎是在一个可以按需显示的弹出窗口之后。您的解决方法是实现目标的普遍接受的方法。您也可以使用我们的通知插件来实现此目的,或者像某些开发人员那样使用第三方 JavaScript 库。希望对您有所帮助。
    猜你喜欢
    • 2012-11-12
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2022-07-03
    • 2012-05-07
    • 1970-01-01
    相关资源
    最近更新 更多