Adds PDF, DOC, and PPT tabs to Google search results
当前为
// ==UserScript==
// @name Add Pdf, Doc, Ppt Tabs to Google search
// @namespace http://tampermonkey.net/
// @version 1.4
// @description Adds PDF, DOC, and PPT tabs to Google search results
// @author Bui Quoc Dung
// @match *://www.google.com/search*
// @grant none
// ==/UserScript==
(function () {
'use strict';
const fileTabs = [
{ label: 'Pdf', query: 'filetype:pdf' },
{ label: 'Doc', query: '(filetype:doc OR filetype:docx)' },
{ label: 'Ppt', query: '(filetype:ppt OR filetype:pptx)' },
];
function addFileTabs() {
const tabContainer = document.querySelector('div[role="list"]');
if (!tabContainer) return;
const tabItems = [...tabContainer.querySelectorAll('div[role="listitem"]')];
if (tabItems.length === 0) return;
const currentQuery = new URLSearchParams(window.location.search).get('q') || '';
if (!currentQuery || currentQuery.toLowerCase().includes('filetype:')) return;
const existingLabels = new Set(tabItems.map(t => t.textContent.trim()));
const baseTab = tabItems[0];
fileTabs.forEach(({ label, query: extra }) => {
if (existingLabels.has(label)) return;
const newItem = baseTab.cloneNode(true);
const a = newItem.querySelector('a');
if (!a) return;
const textElement = a.querySelector('div > span') || a.querySelector('div');
if (!textElement) return;
const url = `/search?q=${encodeURIComponent(`${currentQuery} ${extra}`)}`;
a.href = url;
textElement.textContent = label;
newItem.removeAttribute('aria-selected');
a.removeAttribute('aria-selected');
tabContainer.appendChild(newItem);
});
}
addFileTabs();
new MutationObserver(addFileTabs).observe(document.body, { childList: true, subtree: true });
})();