【问题标题】:Intercept URL before unload with javascript or jquery在使用 javascript 或 jquery 卸载之前拦截 URL
【发布时间】:2013-05-18 12:40:52
【问题描述】:

我正在编写一个简单的 chrome 插件,它会在页面卸载之前拦截新的 URL,如果它包含特定的字符串,我想执行一些操作并使重定向无效!我不知道该怎么做..你能帮帮我吗?

【问题讨论】:

  • 我尝试使用 $(window).bind('beforeunload', function() {...} 但它不起作用!

标签: javascript jquery url google-chrome-extension


【解决方案1】:

您可以将webRequest API 的onBeforeRequest 事件用于Chrome 扩展:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) { 
        // do some actions
        // ...
        return {cancel: true}; 
    },
    // block requests matching this url
    {urls: ["*://www.evil.com/*"]},
    ["blocking"]
);

只需确保您在 manifest.json 文件中拥有正确的权限即可:

您必须在 extension manifest 中声明“webRequest”权限才能使用 Web 请求 API,同时为您想要访问其网络请求的任何主机声明 host permissions

"permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*.google.com"
],

【讨论】:

  • 我要在 background.js 中使用 onBeforeRequest 吗?
  • 我在我的 background.js 中复制了这段代码,并发出警告,看看它是否有效,但没有显示任何内容。
  • 如果您希望以阻塞方式使用webRequest api,那么您还需要添加webRequestBlocking 权限。您也可以在后台页面中使用alert,但我自己更喜欢console.log
  • 谢谢!有没有办法在请求之前有url?
  • 如果你想对被阻止的 URL 做一些事情,你的意思是 details.url 在回调中包含该信息。
【解决方案2】:

在窗口卸载之前触发了一个 javascript 事件:window.onbeforeunload

我知道这在 Firefox 和 IE 中有效,但我了解到它在 Chrome 中并不总是有效。

但是,经过一番挖掘,这似乎在 Chrome 中有效:

$(window).on('beforeunload', function() {
  return 'Your own message goes here...';
});

【讨论】:

  • 现在,问题的第二部分:如何获取下一个 URL..?
  • 你能在返回字符串中返回它吗?然后使用 beforeunload 的返回值重定向到下一个 URL?
  • 不,current 页面无法知道重定向后访问的是哪个 URL。因此我的问题是:您将如何使用答案中的代码来满足问题的要求?
  • 我想我不明白你的问题。我认为如果满足页面上的某些条件,原始请求是阻止重定向。如果用户输入尚未保存或类似...,IE 将显示“脏”警告
  • (我不是发布问题的人,仅供参考)再看看问题及其标题。
【解决方案3】:

据我所知这是不可能的。首先请求将转到服务器。然后服务器将决定重定向 url。(我正在使用 java)

【讨论】:

    猜你喜欢
    • 2012-01-11
    • 1970-01-01
    • 2011-09-26
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多