Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS中的就地重定向_Javascript_Google Chrome Extension_Url Parameters_Html5 History - Fatal编程技术网

Javascript JS中的就地重定向

Javascript JS中的就地重定向,javascript,google-chrome-extension,url-parameters,html5-history,Javascript,Google Chrome Extension,Url Parameters,Html5 History,我正在编写一个Chrome扩展,以便在某个域上无缝地插入URL参数 例如,当您访问search.com/?q=query时,它应该将您重定向到search.com/q=query&new_param=1 以下背景脚本工作正常: chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { var url = changeInfo.url; if ( url && url.start

我正在编写一个Chrome扩展,以便在某个域上无缝地插入URL参数

例如,当您访问
search.com/?q=query
时,它应该将您重定向到
search.com/q=query&new_param=1

以下背景脚本工作正常:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  var url = changeInfo.url;
  if (
    url &&
    url.startsWith("https://search.com/?") &&
    !url.includes('&new_param=')
  ) {
    chrome.tabs.update(tabId, {url: newUrl});
  }
});
但是这个重定向在导航历史记录中创建了两个条目:带和不带新参数

这是不好的,因为在历史中返回到没有参数的页面会再次触发重定向。除非你手动跳回历史记录中的2页,否则你就会陷入困境

如何使
返回
按钮与没有扩展名时保持相同?


Javascript也有window.history.replaceState,但我不确定它是否在chrome扩展沙盒中起作用。

使用chrome.webRequest API,如果需要,请参阅和google提供更多示例。感谢您的建议。现在好多了,唯一有效的部分就是我手动点击页面上的某个链接。我需要刷新页面或手动将其放入地址栏-然后它注入参数。这正常吗?看起来,
onBeforeRedirect
不能用于注入参数,而onBeforeRequest只对新打开的URL做出反应-重新加载或手动键入。有什么解决方法吗?正确的事件是onBeforeRequest,没有您描述的限制,或者我不理解问题所在。对我来说,
onBeforeRequest
无法捕获最简单的重定向-单击页面上的链接。比如说,有一个链接指向
https://search.com
。当我点击它时,
https://search.com
将被打开。当我重新加载页面时,它会变为
https://search.com/?new_param=1
。很不幸,这个脚本在我的情况下不起作用<代码>历史记录不指向选项卡的历史记录,而是指向运行扩展脚本的通用
\u生成的\u后台\u页面
的历史记录。有没有一种方法可以访问某个选项卡的历史记录?如果这不起作用,那很难看,但我知道的唯一其他可能性是使用普通的window.history功能,比如“chrome.tabs.getSelected”(null,function(tab){var jsCode=“alert('history code')”;chrome.tabs.executeScript(tab.id,{code:jsCode},函数(响应){…};});'