【问题标题】:Firefox extension Load page in popapFirefox 扩展在弹出窗口中加载页面
【发布时间】:2016-05-06 16:16:41
【问题描述】:

我想要一个 Firefox 扩展,所以当你点击图标时,它会打开弹出窗口并在弹出窗口中加载我的页面。

我有下一个问题。当我单击扩展图标以获取当前选项卡的 URL 并在弹出窗口中加载我的页面时,我需要将该 URL 作为查询字符串发送。

因此,当您单击图标时,它会打开弹出窗口并加载类似“http://example.com?url={current-URL}”的页面

问题是它在弹出窗口中加载了我的页面一次,下次我单击扩展程序时,它会打开已经呈现的弹出窗口。这是我正在使用的代码:

var { ToggleButton } = require('sdk/ui/button/toggle');
var panels = require("sdk/panel");
var self = require("sdk/self");
var tabs = require('sdk/tabs');

var button = ToggleButton({
  id: "my-button",
  label: "My button",
  icon: {
    "16": "./icon-16.png",
    "32": "./icon-32.png",
    "64": "./icon-64.png"
  },
  onChange: handleChange
});

var panel = panels.Panel({
    width: 700,
    height: 543,
    contentURL: 'http://example.com?url='+ tabs.activeTab.url,
    contextMenu : true,
    onHide: handleHide
});

function handleChange(state) {
  if (state.checked) {
    panel.show({
      position: button
    });
  }
}

function handleHide() {
  button.state('window', {checked: false});
}

所以我想要的是每次单击扩展图标时,它都会在面板中再次加载我的页面,而不仅仅是显示已经呈现的页面。这可能吗,我该怎么做,有什么帮助吗?

【问题讨论】:

    标签: firefox-addon firefox-addon-sdk


    【解决方案1】:

    Panel 的contentURL 属性定义了一个setter,因此更改url 很简单:

    function handleChange(state) {
      if (state.checked) {
       panel.contentURL = 'http://example.com?url='+ tabs.activeTab.url,
       panel.show({
        position: button
        });
      }
    }
    

    【讨论】:

    • 谢谢,但它并不能很好地工作。当新选项卡处于活动状态时打开面板,它会从 URL 重新加载页面,但有 1-2 秒的延迟。它首先显示已经渲染的页面,然后在 1-2 秒后重新加载它。并且对于同一选项卡下的打开关闭面板根本不会重新加载页面,始终显示第一次渲染。每次显示面板以再次呈现页面时,我都需要它。 Chrome 扩展程序非常适合这个
    • 是否可以在点击按钮前设置页面?
    • 这是可能的,但是当弹出窗口隐藏时页面将始终保持打开状态。好吧,从技术上讲,iframe 保持不变。这样您仍然可以与页面进行通信,而不必关心页面是否已加载。解决方法是在关闭面板时始终将 url 设置为“about:blank”。
    • @humanoid 我不得不给他贴上标签。我想问他是否可以在新标签打开和 url 更改时更改面板的 url。无论如何感谢您的详细回复,这也有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多