Chrome扩展API:向当前URL添加参数

3

我正在开发一个“简单”的扩展程序,用于在当前URL的末尾添加参数。我已经成功获取了当前的URL,但无法执行重定向以刷新带有添加参数的页面。我的代码如下:

manifest.json

{
    "name": "Something",
    "version": "1.0",
    "manifest_version": 2,
    "description": "Woohoo",
    "browser_action": {
        "default_icon": "icon.png"
    },

    "background": {
      "persistent": false,
      "scripts": ["bgscript.js"]
    },

    "permissions": [
      "tabs"
    ]
}

bgscript.js

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.query({currentWindow: true, active: true}, function(tabs){
        var currentUrl = tabs[0].url;

        chrome.extension.sendRequest({redirect: currentUrl + "?customparam=1"});
    });
});

有没有人对如何执行这样的重定向有什么想法?

2个回答

6
当单击浏览器操作按钮时,当前活动选项卡将作为参数传递给onClicked监听器回调函数。另外,如您在评论中提到的,需要小心地将自定义查询参数附加到正确位置,并用适当的符号进行前置。具体来说,自定义参数应该放在散列(如果有)之前并放在路径名(如果有)之后,但如果存在更多查询参数,则应该用&而不是?进行前置。
var customParam = encodeURI('customparam=1');
chrome.browserAction.onClicked.addListener(function (tab) {
  var url = tab.url;
  var hashStart = (url.indexOf('#') === -1) ? url.length : url.indexOf('#');
  var querySymbol = (url.indexOf('?') === -1) ? '?' : '&';
  var newUrl = url.substring(0, hashStart) + querySymbol + customParam +
               url.substring(hashStart);

  chrome.tabs.update(tab.id, {url: newUrl});
});

该死,现在你只是在炫耀!我开始写一些能够做到这个的东西,但结果不会像你这么漂亮! - wickywills
很高兴能帮忙 :) - gkalpak

1

没事,我明白了:

bgscript.js

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.query({currentWindow: true, active: true}, function(tabs){
        var currentUrl = tabs[0].url;
        var newUrl = currentUrl + "?customparam=1"
        chrome.tabs.update({url:newUrl});
    });
});

1
实际上,你根本不需要 chrome.tabs.query(...),因为活动标签页已经传递给你了(tab)。所以,在监听器回调中需要放置的只有:chrome.tabs.update(tab.id, {url: tab.url + '?customparam=1'}); - gkalpak
@ExpertSystem - 这样更有意义,也简化了一些(我是一个相当简单的人!),再次感谢 :)。现在只需要想办法如何将其添加到具有现有参数的URL中-不过我认为这应该相当简单 :)。 - wickywills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接