2

序章

Chrome の拡張機能に問題があります。テキストの選択に基づいて、Google からの検索結果を含む小さなオーバーレイ ポップアップ ウィンドウ (jQuery で作成) を表示するはずです。基本的に、任意のページのテキストを強調表示し、それを右クリックして (コンテキスト メニュー)、[「選択したキーワード」を検索] をクリックすると、同じタブに小さなウィンドウがポップアップし、すべての検索結果がオーバーレイとして表示されます。グーグルまたは別の検索エンジン。

問題

現在、拡張機能は問題なく非常にうまく機能しますが、この拡張機能を長時間 (たとえば 1 時間) 使用した後、別のキーワードを強調表示して検索すると、拡張機能が最後のキーワードを思い出し、間違った検索結果が表示されます。もう一度、別のキーワードを強調表示すると、強調表示したキーワードが記憶されますが、以前は結果が得られませんでした。それは連鎖するプロセスのようなもので、私は常に 1 つのキーワードの後ろにいます。

私の考え

この問題が発生したときに console.log(chrome.extension.onRequest.hasListeners()); からログを取得しているため、この問題の原因はイベント リスナーである可能性があると思います。これは本当です。これは、2 つ以上のイベント リスナーがアタッチされていることを意味します。

実際の Web ページがまだロードされていて、キーワードを強調表示しているときに発生する可能性があります。コンテキスト メニューをクリックすると、拡張機能はまだロードできませんが、どういうわけかイベント リスナーが起動します...この問題を完全に再現することはできません...そしてこの問題の原因。

マニフェスト ファイル

{
  "name": "Search Accelerator",
  "version": "1.0",
  "manifest_version": 2,
  "description": "Search Accelerator extension",
  "icons": {
    "16": "icon19.png",
    "48": "icon48.png",
    "128": "icon128.png"
  },
  "background": {
    "scripts": ["content_script.js"]
  },
  "minimum_chrome_version": "18",
  "permissions": [
    "contextMenus",
    "tabs",
    "http://*/*",
    "https://*/*",
    "management",
    "webRequest"
  ]
}

コンテンツ スクリプト

chrome.contextMenus.create({ "title": '"%s" を検索',
"contexts":['selection'], "onclick": getClickHandler() });

function getClickHandler() { return function(info, tab) {
console.log(chrome.extension.onRequest.hasListeners());

chrome.extension.onRequest.addListener(function listener1 (request, sender, sendResponse) {
  var url = "http://www.google.com/?s=" + info.selectionText;
  console.log(url);       var keywordObj = {keyword: url};
  if (request.keywordRequest == "Yes") {
    console.log(keywordObj);
    sendResponse(keywordObj);
  };
  chrome.extension.onRequest.removeListener(listener1);     }     );

chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
chrome.tabs.executeScript(null, { file: "popup.js" });
});   }; };

ポップアップjs

chrome.extension.sendRequest({keywordRequest: "Yes"}, function(response) {
$(document).ready(function() {
    if($("#e14_accelerator")) {
        $("#e14_accelerator").remove();
    }
    var rkeyword = response.keyword;

    $("body").append("<div id=\"e14_accelerator\" style=\"position: fixed;top: 30px;right: -330px;z-index: 999999; \"><iframe style=\"border:5px solid #c9c9c9;-webkit-box-shadow: 1px 1px 15px 1px rgba(0, 0, 0, 0.2);\" src=\""+ rkeyword +"\" width=\"328\" height=\"240\"></iframe></div>");
    $("#e14_accelerator").animate({right:-13},500);

    $(document).click(function() {
            $("#e14_accelerator").remove();
    });
    $("#e14_accelerator").click(function() {
        return false;
    });
 });
});

この問題が発生したときに表示されるエラー メッセージ:

Error during tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/devtools.html?docked=true&dockSide=bottom&toolbarColor=rgba(230,230,230,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host. sendRequest:21
chromeHidden.handleResponse sendRequest:21
Error during tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/devtools.html?docked=true&dockSide=bottom&toolbarColor=rgba(230,230,230,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host. sendRequest:21
chromeHidden.handleResponse
4

0 に答える 0