如何在 Firefox page-mod 中进行重定向?

2024-03-06

我正在尝试将我的 Google Chrome 扩展程序移植到 Firefox Add-On SDK,并且我需要该扩展程序来过滤我网站中的页面并进行重定向。例如,如果用户打开“http://example.com/special http://example.com/special“我需要把他送到”http://example.com/redirect http://example.com/redirect”在同一浏览器选项卡中。

这就是我尝试这样做的方法:

var pageMod = require("page-mod").PageMod({
    include: "*",
    contentScriptWhen: "start",
    contentScript: "",

    onAttach: function(worker) {
       if (worker.tab.url == worker.url && 
           worker.url.indexOf("example.com/special") > -1) {
           worker.tab.url = "http://example.com/redirect";
       }
    }
});

问题是:我的浏览器有时会在重定向后挂起(在新页面显示在选项卡中后立即)。我究竟做错了什么?

使用 Firefox 16.0.2,附加 SDK 1.11


最好的方法是在较低级别进行:

const { Cc, Ci, Cr } = require("chrome");

var events = require("sdk/system/events");
var utils = require("sdk/window/utils");


function listener(event) {
    var channel = event.subject.QueryInterface(Ci.nsIHttpChannel);
    var url = event.subject.URI.spec;

    // Here you should evaluate the url and decide if make a redirect or not.
    // Notice that "shouldIredirect" and "newUrl" are guessed objects you must replace!
    if (shouldIredirect) {
      // If you want to redirect to another url, the you have to abort current request
      // See https://developer.mozilla.org/en-US/docs/XUL/School_tutorial/Intercepting_Page_Loads
      channel.cancel(Cr.NS_BINDING_ABORTED);

      // Aet the current gbrowser object (since the user may have several windows and tabs) and load the fixed URI
      var gBrowser = utils.getMostRecentBrowserWindow().gBrowser;
      var domWin = channel.notificationCallbacks.getInterface(Ci.nsIDOMWindow);
      var browser = gBrowser.getBrowserForDocument(domWin.top.document);

      browser.loadURI(newUrl);
    } else {
      // do nothing, let Firefox keep going on the normal flow
    }
  };
};

exports.main = function() {
  events.on("http-on-modify-request", listener);
};

如果你想在 actiton 中看到这段代码,请看一下这个插件 https://github.com/matagus/remove-google-redirects-addon/blob/master/lib/main.js (免责声明:这是我开发的一个插件)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Firefox page-mod 中进行重定向? 的相关文章

  • 按键对 JavaScript 对象进行排序

    我需要按键对 JavaScript 对象进行排序 因此 以下内容 b asdsad c masdas a dsfdsfsdf 会成为 a dsfdsfsdf b asdsad c masdas 这个问题的其他答案已经过时 与实施现实不符 并
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • 如何将 Django 中的数组传递给模板并在 JavaScript 中使用它

    我想将数组传递给模板 然后通过 JavaScript 使用它 In my views py I have arry1 Str 500 20 return render to response test html array1 arry1 在
  • Sonar 中的 javascript 代码覆盖率

    我是使用 Sonar 和插件进行 javascript 代码覆盖的新手 使用 Sonar 分析时 有哪些可能性可以找出 javascript 代码的质量 包括代码覆盖率 目前我正在使用 karma runner 它提供代码覆盖率报告 可以在
  • 实现悬停信息框

    我有一个日历 当用户将鼠标悬停在单元格上时 会出现一个很大的信息框 其中包含该日期的详细信息 虽然当用户离开时使信息框消失 但我遇到了一些麻烦 我基本上想要它 这样当鼠标光标移出信息框隐藏的日历单元格时 它就会消失 但我遇到了麻烦 因为mo
  • Javascript 在另一个函数中检测“Shift”键按下

    我正在从 Flash 影片 使用外部接口 调用我的 html 页面中的 Javascript 函数 并且我想知道调用该函数时用户是否按下了 Shift 键 例如 如果我通过鼠标单击调用该函数 这似乎很简单 因为我可以传递事件并检查 if e
  • 在 setInterval / setTimeout 中使用变量作为时间[重复]

    这个问题在这里已经有答案了 这是一个示例情况 var count time 1000 setInterval function count 1 time 上面的代码会将 count 变量加 1 即 1000 毫秒 看来 setInterva
  • React 应用程序中的 addEventListener 不起作用

    一些背景 我正在尝试消费自定义网络组件在 React 应用程序中并尝试监听来自 Web 组件的事件 我相信您不能只在自定义 Web 组件上以通常的反应方式处理事件 i e
  • 使用 :hover 作为元素的内联样式(使用 HTML/CSS/php)[重复]

    这个问题在这里已经有答案了 可能的重复 如何将 a hover 规则嵌入到文档中间的样式属性中 https stackoverflow com questions 131653 how do i embed an ahover rule i
  • 窗口大小调整触发的 DOM 事件

    我有一个布局相当复杂的页面 最初打开页面时 某些元素的对齐存在问题 但是 可以通过更改浏览器窗口的大小来 永久 解决此问题 显然 我不希望用户必须调整浏览器窗口的大小才能使页面正确显示 所以我想知道是否有一种方法可以在页面首次加载时以编程方
  • 类型“void”不可分配给类型“((event:MouseEvent) => void) |不明确的'

    import as React from react import App css import PageTwo from components PageTwo export interface IPropsk data Array
  • @aspnet/signalr 与 @microsoft/signalr javascript 库

    aspnet signalr 与 microsoft signalr javascript 库有什么区别 两者似乎都对 DotNetCore SignalR 有效 两者似乎都很活跃 在一些教程中 我找到 aspnet signalr 在Do
  • 有没有办法伪造同步 XHR 请求?

    我正在使用 Emscripten 系统将一堆 C 代码移植到 Javascript C 代码有很多调用fopen这是一个同步 IO 调用 在 Emscripten 中 我们使用对本地资源的 XHR 请求来模拟这一点however 在 Fir
  • 尝试使用 Firebug 查找 JavaScript 文件中的函数

    我试图找到这个函数调用 myFooBar 该函数在某些 HTML 中内联引用 但页面加载了大量 JavaScript 并且在每个文件中搜索该函数需要相当多的工作 如何使用 Firebug 找到此函数所在的 JavaScript 文件 打开脚
  • 如何使用 JavaScript 获取元素的填充值?

    我有一个textarea在我的 HTML 中 我需要获取整数或浮点形式的填充数值 以像素为单位 我如何使用 JavaScript 获取它 我没有使用 jQuery 所以我正在寻找纯 JavaScript 解决方案 这将返回padding l
  • 弹出窗口的动态高度取决于内容,可能吗?

    是否有可能获得一个宽度始终为 400px 的弹出窗口 但根据弹出窗口中的内容动态高度 我已经看到了这个 但不知道如何将其应用到弹出窗口 调整 iframe 的宽度高度以适应其中的内容 https stackoverflow com ques
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • 用javascript调用外部网页(跨域)

    我正在尝试使用以下网络服务来验证提要这个问题 https stackoverflow com questions 11996430 check if a url is a valid feed 但浏览器不允许我向另一台服务器发送 ajax

随机推荐

  • 相当于 ASP.NET 中的 ASP.NET MVC TempData

    在 ASP NET MVC 中 有一个 TempData 可以将数据一次从一个页面传递到另一页面 在 ASP NET 中这相当于什么 没有直接的等效项 即仅传递到下一页的数据 您可以使用Session并在接收页面将其清除
  • 保存/提交时重新加载 jqGrid

    我有以下代码可以在双击时进入内联编辑 ondblClickRow function row id if row id null Products jqGrid restoreRow last selected row Products jq
  • 在 Javascript 中模拟 window.location.href

    我对一个使用 window location href 的函数进行了一些单元测试 这并不理想 我宁愿将其传递进去 但在实现中这是不可能的 我只是想知道是否可以模拟这个值而不实际导致我的测试运行器页面实际转到该 URL window loca
  • 对于此场景,在 SQL 中连接多个表

    这是我的表结构 我有3张桌子 会员表 评论表 评论如表 表结构可以在下图中找到 表 会员 user id full name email password image join date 表 专辑 评论
  • 使用Python/Boto/Django构建策略直接上传到S3

    到目前为止 我已经经历了这个问题的多次迭代 搜索了许多不同的示例 并且已经阅读了所有文档 我正在尝试结合 Plupload http www plupload com http www plupload com 与 AWS S3 直接发布方
  • 带有用户输入和选择变量的 Jenkinsfile

    我想使用新的 Jenkinsfile 来完成新的工作 我有 jenkinsfile 它位于单独的存储库中 我从另一个 GitLab 存储库获取分支git ls remote在bash中 我将它们存储在变量中 branch1 branch2
  • Ionic 3 - cocoapods 的 xcode 错误

    我尝试构建一个带有推送通知的 ionic 3 应用程序 但我在 iOS 部署方面遇到了一些问题 我在 xcode 中遇到了 3 个错误 diff Podfile lock No such file or directory diff Man
  • 为什么 GHC 使修复变得如此令人困惑?

    查看 GHC 源代码我可以看到定义fix is fix a gt a gt a fix f let x f x in x 在一个例子中fix像这样使用 fix f x gt let x x 1 in x f x 这基本上会产生一系列加一到无
  • 支持索引视图的会话设置

    我在数据库中使用索引视图 因此客户端应该有一些会话连接设置来调用它们 我正在使用 ado net 连接 命令调用存储过程 每次我必须调用存储过程时 我都会创建连接 我希望连接池允许我快速完成此操作 并执行命令以将这些设置应用到当前连接 so
  • 如何在 Android Studio 中显示行号[重复]

    这个问题在这里已经有答案了 我正在发布 如何在 Android Studio 中显示行号 的快速参考 请参阅下面的答案 注意 这个问题已被标记为重复 因为 Android Studio 基于IntelliJ http blog jetbra
  • 相同的字体在 Chrome 与 Firefox、IE 和 Safari 中看起来不同

    该问题与在不同浏览器中呈现字体有关 我很惊讶地发现这个问题只在 Chrome 中重现 它在 Firefox IE8 Safari 甚至 IE6 中运行良好 样品来了 这是代码本身 div style padding top 1px widt
  • ReactJS:使用 useState 管理多个复选框输入

    我有以下示例组件 它使用多个复选框来选择要从对象列表中删除的项目 import React useState from react import styles css const data name test1 result pass na
  • 使用 JLayeredPane 创建棋盘游戏布局

    我有一项任务要求我创建您在图像中看到的布局 作为游戏开发的一部分 我以前从未在桌面应用程序中使用过 Java 因此在使用 Swing 和 AWT 库方面我完全是个菜鸟 该图像建议我们使用 JLayeredPane 作为根容器 然后将其余部分
  • 支持 R2dbcRepository 中的异常处理,或者如何使用我自己的错误处理程序来装饰 R2dbcRepository 中的每个方法调用

    背景 我有一个应用程序范围的通用异常处理程序来翻译来自R2dbcRepository 例如 摘录只是为了显示预期目的 Component public class ErrorHandler public Throwable mapError
  • Javascript insideHtml 不工作

    我想创建一个函数来替换单击后的 h1 html 它似乎不起作用 我不知道我做错了什么 这是我的 JavaScript function changeToYoMaMa el el innerHtml h1 Yo Mama h1 var el
  • 如何绑定到任何可用端口?

    我需要一个将 UDP 数据包发送到某个网络服务器并接收响应的应用程序 服务器回复请求所在的相同端口号 因此我首先需要将我的套接字绑定 到任何 UDP 端口号 对 UDP 端口号进行硬编码是一个坏主意 因为它可能会被同一台 PC 上运行的任何
  • WPF 简单的提示和技巧? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在研究边距和填充时发现负值是可以接受的 并且在适当的情况下会产生很好的效果 例如 如果您的边框带有填充对象 并且您希望填充对象颜色超
  • 动态组件流畅自动映射

    有谁知道如何在 NHibernate 中使用 Fluent Automapping 自动映射动态组件 我知道我们可以将普通类映射为组件 但无法弄清楚如何使用流畅的自动映射将字典映射为动态组件 Thanks 我们成功地使用了以下方法 流畅NH
  • Docker compose 文件所有权

    我使用 Docker Compose 创建了 Django 项目 Dockerfile FROM python 2 7 ENV PYTHONUNBUFFERED 1 RUN mkdir code WORKDIR code ADD code
  • 如何在 Firefox page-mod 中进行重定向?

    我正在尝试将我的 Google Chrome 扩展程序移植到 Firefox Add On SDK 并且我需要该扩展程序来过滤我网站中的页面并进行重定向 例如 如果用户打开 http example com special http exa