功能目标:同时在谷歌浏览器的所有打开的标签页的搜索框里搜索内容
遗留bug:任一标签网页需要先在当前页面搜索过后,才能被统一同步批量搜索
遗留优化点:使鼠标点击插件图标后 自动定位到搜索框
文件结构:
multi-tab-search/
├── manifest.json
├── popup.html
├── popup.js
├── background.js
├── content.js
└── icon.png
manifest.json文件内容:
{
"manifest_version": 2,
"name": "Multi Tab Search",
"version": "1.0",
"permissions": [
"tabs",
"activeTab"
],
"browser_action": {
"default_popup": "popup.html",
"default_icon": {
"16": "icon.png",
"48": "icon.png",
"128": "icon.png"
}
},
"background": {
"scripts": ["background.js"],
"persistent": false
}
}
background.js文件内容:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.query) {
chrome.tabs.query({}, function(tabs) {
tabs.forEach(function(tab) {
chrome.tabs.executeScript(tab.id, {
code: `
var searchBoxes = document.querySelectorAll('input[type="search"], input[name="q"], input[title="搜索"], input[placeholder="Search"]');
if (searchBoxes.length > 0) {
searchBoxes[0].value = "${request.query}";
var form = searchBoxes[0].closest('form');
if (form) {
form.submit();
} else {
searchBoxes[0].dispatchEvent(new KeyboardEvent('keydown', {key: 'Enter'}));
}
}
`
});
});
});
}
});
content.js文件内容:
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.query) {
searchInPage(request.query);
}
});
function searchInPage(query) {
// 定义搜索操作的函数
const searchBoxes = document.querySelectorAll('input[type="search"], input[name="q"], input[title="搜索"], input[placeholder="Search"]');
if (searchBoxes.length > 0) {
searchBoxes[0].value = query;
const form = searchBoxes[0].closest('form');
if (form) {
form.submit();
} else {
searchBoxes[0].dispatchEvent(new KeyboardEvent('keydown', {key: 'Enter'}));
}
} else {
console.log("No searchable input field found on this page.");
}
}
popup.html文件内容:
<!DOCTYPE html>
<html>
<head>
<title>Multi Tab Search</title>
<style>
body {
width: 200px;
padding: 10px;
}
input {
width: calc(100% - 22px);
padding: 5px;
}
button {
width: 100%;
padding: 5px;
margin-top: 10px;
}
</style>
</head>
<body>
<input type="text" id="searchQuery" placeholder="Enter search query">
<button id="searchBtn">Search</button>
<script src="popup.js"></script>
</body>
</html>
popup.js文件内容:
document.getElementById('searchBtn').addEventListener('click', function() {
var searchQuery = document.getElementById('searchQuery').value;
searchTabs(searchQuery);
});
document.getElementById('searchQuery').addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
var searchQuery = document.getElementById('searchQuery').value;
searchTabs(searchQuery);
}
});
function searchTabs(query) {
chrome.runtime.sendMessage({query: query});
}