2017-07-17 16 views
1

Google Chrome拡張機能を使用しています。私自身は解決できないバグに遭遇しています。現在のタブでコンテンツスクリプトの実行を停止するにはどうすればよいですか?

それは予想通り、単一のYouTubeのタブでYouTubeのダークモードに切り替える動作しますが、あなたはYouTubeやのCtrl/Cmdをにしている場合はcontent.jsが再びトリガされ、(新しいタブで開く)リンクをクリックして、現在のタブが白くなり、新しいタブが暗くなります。

暗いタブの場合、「子」タブは自動的に暗くなります。

manifest.jsonを:

{ 
    "manifest_version": 2, 

    "permissions": [ 
     "https://www.youtube.com/*", 
     "activeTab" 
    ], 

    "background": { 
     "scripts": ["background.js"], 
     "persistant": false 
    }, 

    "browser_action": { 
     "default_title": "Engage Youtube Dark Mode." 
    }, 

    "content_scripts": [ 
    { 
     "matches": ["https://www.youtube.com/*"], 
     "js": ["content.js"] 
    }] 
} 

background.js:

//var alreadyTriggered = false; 

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: "clicker.js"}); 
}); 
/* 
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    alreadyTriggered = false; 
});*/ 

chrome.runtime.onMessage.addListener(function(response, sender, sendResponse) { 
    //if (!alreadyTriggered) { 
     chrome.tabs.executeScript(null, {file: "clicker.js"}); 
     //alreadyTriggered = true; 
    //}; 
    return true; 
}); 

content.js:

var myDate = new Date(); 

if ((myDate.getHours() <= 7) || (myDate.getHours() >= 19)) 
{ 
    var darkMode = document.body.getAttribute("dark"); 
    if (!darkMode) { 
     chrome.runtime.sendMessage(window.location.href, function(result) {}); 
    }; 
}; 

私は私が間違ってactiveTabを使用していることを推測しています。どんな助けでも大歓迎です。ありがとう!

clicker.js:

window.onload = doStuff();を使用して そしてdarkModeの値がnull、ないundefinedたことを確認する:

stepOne(); 

function stepOne() { 
    try { 
     var buttons = document.querySelectorAll("button.ytd-topbar-menu-button-renderer"); 
     buttons[0].click(); 
     stepTwo(); 
    } 
    catch(error) { 
     setTimeout(stepOne, 250); 
    } 
} 

function stepTwo() { 
    try { 
     buttons = document.querySelectorAll("paper-item.ytd-account-settings"); 
     buttons[0].click(); 
     stepThree(); 
    } 
    catch(error) { 
     setTimeout(stepTwo, 100); 
    } 
} 

function stepThree() { 
    try { 
     buttons = document.querySelectorAll("paper-toggle-button.style-scope.ytd-account-settings"); 
     buttons[0].click(); 

     document.body.click(); 
    } 
    catch(error) { 
     setTimeout(stepThree, 100); 
    } 
} 
+0

@wOxxOmコメントありがとうございます。 content.jsを追加するように更新しました – Sam

答えて

0

私のために働いてしまった何の組み合わせを使用することでした。

これは、コードを無限に調整している人に役立ちます。

関連する問題