【问题标题】:Firefox Extension location.href not redirectingFirefox 扩展 location.href 不重定向
【发布时间】:2016-11-09 06:54:38
【问题描述】:

我在这里使用了一些相当通用的东西,但基本上我希望能够在选择我的扩展程序时在我想要的 URL 处加载一个新选项卡,然后在该选项卡处重定向到一个新 URL。 (插件应该在重定向之前在第一页运行一些代码,但那是另一天)。

我现在的代码是

var buttons = require('sdk/ui/button/action');
var tabs = require("sdk/tabs");

var button = buttons.ActionButton({
  id: "redirect",
  label: "redirect",
  icon: {
    "16": "./icon-16.png"
  },
  onClick: handleClick
});

function handleClick(state) {
    tabs.open({
    url: "http://www.google.com",
    onReady: loadRedirect
    });

  function loadRedirect(tab) {
    tab.attach({
      contentScript: "location.href = 'www.youtube.com;'"
    });
  }
} 

但是,在运行此程序时,第二个 URL 会附加到第一个 URL,而不是替换,然后陷入无限加载/刷新循环,直到我关闭浏览器。

我想我遗漏了一些绝对明显的东西,但我在四处搜索时找不到任何东西。

【问题讨论】:

    标签: javascript firefox firefox-addon


    【解决方案1】:

    您正在尝试将location.href 更改为没有方案的字符串。假定它是当前域内的 URL。因为它也不以/ 开头,所以它被假定为相对于当前页面。因此,它被附加到当前的google.com URL。页面准备就绪;触发ready 事件;并调用您的 onReady 处理程序。然后,您的处理程序更改 URL,导致页面重新加载,并再次触发 ready 事件,该事件再次启动该过程。这是你的无限循环。

    要真正到达www.youtube.com,您可以将代码更改为:

    function loadRedirect(tab) {
      tab.attach({
        contentScript: "location.href = 'https://www.youtube.com';"
      });
    }
    

    这可以通过分配给tab.url 来完成,而无需注入内容脚本:

    function loadRedirect(tab) {
      tab.url = 'https://www.youtube.com';
    }
    

    但是,这不会阻止无限循环。有很多方法可以做到这一点。最简单的方法是删除 ready 监听器:

    function loadRedirect(tab) {
      tab.off('ready',loadRedirect);
      tab.url = 'https://www.youtube.com';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多