以编程方式(或可选)覆盖Chrome的新标签页

时间:2015-05-25 11:52:10

标签: javascript google-chrome google-chrome-extension tabs

我已经编写了overrides the New Tab page

的Chrome扩展程序

的manifest.json

  "chrome_url_overrides": {
    "newtab": "new-tab.html"
  },

有没有办法让这个覆盖可选?也就是说,我想让用户取消选中选项页面中的复选框并禁用新标签覆盖。这必须是可能的,因为当我第一次打开新标签时,弹出窗口会通知扩展程序更改新标签设置并询问是保留更改还是恢复设置:

enter image description here

我无法找到任何用于控制替换的API。 New Tab Redirect项目没有显示原生新标签的选项。

3 个答案:

答案 0 :(得分:6)

您可以编写一个侦听器来监听使用chrome_url_override更新标签的时间,而不是使用chrome.tabs.onUpdated.addListener(),然后检查网址是否为chrome:// newtab /,如果是,则检查勾选框,然后使用chrome.tabs.update()将它们重新定位到另一个页面。

答案 1 :(得分:6)

Google制作了Star Wars new tab replacement,可让您查看默认的新标签页。它使用的网址是chrome-search://local-ntp/local-ntp.html。例如:

<强> options.html:

<input type="checkbox"> Use default new tab page

<强> options.js:

var checkbox = document.querySelector("input[type=checkbox]")
checkbox.addEventListener("click", function() {
 chrome.storage.sync.set({ defaultnewtab: checkbox.checked })
})

<强> newtab.js:

chrome.storage.sync.get("defaultnewtab", function(storage) {
 if(storage.defaultnewtab) {
  chrome.tabs.update({ url: "chrome-search://local-ntp/local-ntp.html" })
 }
})

答案 2 :(得分:4)

使用@Daniel Herr所描述的星球大战方法,我做到了这一点,效果很好。虽然感觉有点黑客。

我在popup.html中设置了一个选项,无论扩展名是&#34;在&#34;或不。

首先,使用Chrome定义的方法设置默认的新标签页:

<强>的manifest.json

"chrome_url_overrides": {
      "newtab": "newtab.html"
},

然后在你的扩展程序newtab.html中调用一个新的JavaScript文件,newtab.js(或其他)。

我也在使用jQuery,所以我的代码使用了它,但您可以使用DOMContentLoaded本地执行此操作。

<强> newtab.js

&#13;
&#13;
$(document).ready(function(){ 

    // It takes a moment for the Chrome query/update so sometimes there is a flash of content
    // Hiding the Body makes it look blank/white until either redirected or shown
	$('body').hide();

	var background = chrome.extension.getBackgroundPage();
	var _app = background._app;

	// App is OFF, show Default New Tab
	if(!_app._on){

		// Get the current Tab
		chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {

			var active = tabs[0].id;
          
            // Set the URL to the Local-NTP (New Tab Page)
			chrome.tabs.update(active, { url: "chrome-search://local-ntp/local-ntp.html" }, function() { });
		});

	// App is ON, show custom content
	} else {
		
		$('body').show();
	}

});
&#13;
&#13;
&#13;

基本上,该方法是更新标签,以便将其重定向到chrome-search://local-ntp/local-ntp.html,这是默认Chrome NTP的硬URL。

由于这是Chrome内部网址,因此网址字段仍显示为空白。