WEB制作バンコクの23歳女性起業家梶村和花渾身のgoogle extention開発

バンコクの23歳女性起業家梶村和花渾身のgoogle extention開発

といいつつ5分で終わりました。

SEOをやっていると、
あるサイトを開いている時に
「このサイトのキーワード数っていくつだろう、あとサイト内部のリンクと外部のリンクっていくつだろう」と考え、地道にカウントするということありますよね?

それを1秒で解決するextentionを今カップラーメンを食べながら開発しました。

まずあなたのPCのどこかに「counterkajimura」というフォルダを作り
そこに
background.jsを描きます。

chrome.runtime.onInstalled.addListener(() => {
  console.log('Keyword Counter extension installed.');
});

// Optionally, handle activation when the user clicks on the extension icon
chrome.action.onClicked.addListener((tab) => {
  console.log('Extension icon clicked:', tab.url);
});

次に、
manifest.jsonを書きます。

{
  "manifest_version": 3,
  "name": "Keyword Counter",
  "version": "1.0",
  "description": "Counts the occurrences of specified keywords on the current page.",
  "permissions": ["activeTab", "scripting"],
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "icon.png"
    }
  },
  "background": {
    "service_worker": "background.js"
  }
}

次に
vim popup.html を作ります。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <style>
    .keyword-input { margin: 5px 0; }
  </style>
</head>
<body>
  <div id="form-container">
    <div class="keyword-input">
      <input type="text" placeholder="Enter keyword" class="keyword">
      <span class="count-result"></span>
    </div>
  </div>
  <button id="add-button">+</button>
  <button id="count-button">カウントする</button>
  <button id="link-count-button">リンク数</button>

  <div id="link-count-result">
    <!-- This will display the link counts -->
  </div>

  <script src="popup.js"></script>
</body>
</html>

そして最後に
popup.jsを作ります。

// Add event listener for adding keyword input
document.getElementById('add-button').addEventListener('click', () => {
  const container = document.getElementById('form-container');
  const newInput = document.createElement('div');
  newInput.className = 'keyword-input';
  newInput.innerHTML = `
    <input type="text" placeholder="Enter keyword" class="keyword">
    <span class="count-result"></span>
  `;
  container.appendChild(newInput);
});

// Add event listener for keyword count
document.getElementById('count-button').addEventListener('click', () => {
  const keywords = Array.from(document.querySelectorAll('.keyword')).map(input => input.value);

  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
    chrome.scripting.executeScript({
      target: { tabId: tabs[0].id },
      func: countKeywords,
      args: [keywords]
    }, (results) => {
      const counts = results[0].result;
      document.querySelectorAll('.keyword-input').forEach((inputDiv, index) => {
        inputDiv.querySelector('.count-result').textContent = `Count: ${counts[index]}`;
      });
    });
  });
});

// Function to count keywords
function countKeywords(keywords) {
  return keywords.map(keyword => (document.body.innerText.match(new RegExp(keyword, 'gi')) || []).length);
}

// Add event listener for link count
document.getElementById('link-count-button').addEventListener('click', () => {
  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
    chrome.scripting.executeScript({
      target: { tabId: tabs[0].id },
      func: countLinks,
      args: [tabs[0].url]
    }, (results) => {
      const { sameDomainCount, diffDomainCount } = results[0].result;
      document.getElementById('link-count-result').innerHTML = `
        同じドメインは${sameDomainCount}個<br>
        違うドメインは${diffDomainCount}個
      `;
    });
  });
});
// Function to count links on the current page
function countLinks(currentUrl) {
  const currentDomain = new URL(currentUrl).hostname;
  const links = document.querySelectorAll('a');
  let sameDomainCount = 0;
  let diffDomainCount = 0;

  links.forEach(link => {
    // Handle links with full URLs, relative paths, or anchor links
    let linkHref;
    try {
      linkHref = new URL(link.href, currentUrl); // Create a full URL based on the page URL
    } catch (e) {
      return; // Skip invalid URLs
    }

    const linkDomain = linkHref.hostname;
    if (linkDomain === currentDomain) {
      sameDomainCount++;
    } else {
      diffDomainCount++;
    }
  });

  return { sameDomainCount, diffDomainCount };
}

そして、

chrome://extensions/
にアクセスし、パッケージ化されていない拡張機能を選択し、
先ほど作ったcounterkajimuraフォルダを読み込ませると

はい、あなたのChromeのブックマークにextentionがでてきました。

神ですね。