0

Tampermonkey 또는 Chrome 확장 프로그램에서 userscript를 사용하여 YouTube 용 Chrome 확장 프로그램을 만들 때 확장 프로그램이 실행되어야하는 페이지를 떠날 때 확장 프로그램이이를 인식하지 못합니다. 최근에 구현 된 history.push 함수. 그래서 예를 들면 :YouTube에서 Chrome 확장 프로그램 및 Tampermonkey

// @include  http://www.youtube.com/feed/subscriptions 

나는 내 구독에 갈 때 실행 그래서 이런 짓을. 그러나 동영상을 클릭하면 광고 확장을 계속로드합니다. 그리고 크롬 확장으로 변환하면 실행하지 않아도 계속 실행됩니다.

특정 코드를 실행하기 위해 특정 YouTube 페이지에 있는지 어떻게 알 수 있습니까?

+0

롭, 그렇긴하지만 그 대답은 최신이 아닙니다. 나는 그것을 시도했지만 기본적으로 아무것도하지 않는다. –

+0

모든 단계를 수행 했습니까? 현재 가지고있는 것 대신에'// @include * : // www.youtube.com/*'을 사용하는 것을 포함합니까? –

+0

예. 아무 일도하지. –

답변

1

이 문제는 history.pushState()에 의해 URL을 수정하는 페이지 때문에 발생합니다. 페이지를 다시로드하지 않고 표시 URL과 내용 만 수정합니다.

Tampermonkey에서 스크립트를 실행할 때 강제로 해당 조작을 다시로드해야합니다.

참고 : 구독 페이지에서 이동할 때 스크립트가 실행되지 않도록하려면 @match 문을 @include로 변경하십시오.

// ==UserScript== 
// @name  YT pushState 
// @namespace http://tampermonkey.net/ 
// @version 0.1 
// @match  *://*.youtube.com/* 
// @grant  none 
// ==/UserScript== 

window.history.__proto__.pushState = function(a, b, url) { 
    window.location.href = url; 
} 

if (window.location.href.match(/https?:\/\/www\.youtube\.com\/feed\/.*/)) { 
    console.log("Put main function here!");        
} else { 
    console.log("Ignore this page"); 
} 
+0

참고로 YouTube에서는 새 페이지가 실제로로드되기 전에 URL이 변경됩니다. 스크립트가 문서의 구조에 의존하는 경우이 일반적인 방법은 URL이 변경 될 때 문서가 변경되지 않았기 때문에 도움이되지 않습니다. –

+0

이것은 중요하지 않습니다. B가 history.pushState에 의해 설정되는 동안 URL A에서 스크립트를 실행하지만 URL B에서는 스크립트를 실행하지 않기를 바란다고 생각합니다. 위의 스크립트는 pushState 호출이 감지 될 때 전체 페이지를 다시로드하거나 사용자 스크립트가 수행중인 작업을 중단하도록 신호를 보낼 수있는 이벤트를 트리거합니다. – derjanb

+0

URL A에 있으면 스크립트가 실행되지 않아야합니다. URL B에 있으면 스크립트가 실행되어야합니다. 그러나 YouTube 구현에서 현재 페이지가 URL A 인 경우에도 URL은 URL B로 이미 변경됩니다. 따라서 pushState 호출을 가로 채서 탐색 변경 사항을 감지하려고하면 스크립트가 너무 일찍 실행됩니다. –