자바 스크립트를 처음 사용하고 Chrome 확장 기능을 배우려고합니다. 생각할 수있는 모든 질문에 대한 내 검색을 실시했으나 발견 한 답변이 내 구체적인 문제에 대해 작동하지 않습니다. 크롬 확장을위한 자습서를 살펴 보았습니다. 실제로 작동해야한다고 생각하는 것은 사실 작동하지 않습니다.Chrome 확장 프로그램에서 content_scripts 일치가 무시되고 있습니다.
내가 작성한 확장 프로그램에는 html 페이지가 없으며 항상 실행해야하는 아이콘 만 있습니다. 실제로는 완벽하게 작동하여 채팅 창을 열지 못하도록 특정 채팅 프로그램에 대한 호출을 차단합니다. 오랫동안 사이트에 있어야하고 채팅 창을 닫지 않으려는 테스터를 위해 작성되었습니다.
확장 기능은 모든 웹 사이트에서 작동하며 한 웹 사이트에서만 작동하는 것이 문제입니다. 즉, 사용자가 동일한 채팅 소프트웨어를 사용하는 다른 웹 사이트에있을 때 채팅 창이 차단됩니다.
내가 읽은 것은 manifest.json의 content_scripts 블록에서 사용하려는 웹 사이트와 일치하는 항목을 사용하면 해당 사이트에서만 확장 프로그램이 실행됩니다. 작동하지 않습니다. 사실 manifest 파일에서 content_scripts 블록을 완전히 제거하면 확장 기능은 완전히 동일하게 작동합니다. javascript 함수가 호출되고 채팅 창이 차단됩니다. 따라서 어떤 이유 때문에 content_scripts 블록이 무시되고 있습니다. javascript 멍청한 놈처럼, 나는 중요한 단계를 빠뜨린 것 같아. 나는이 코드의 대부분을 예제에서 가지고 약간 수정했다. 누구든지 도와 줄 수 있습니까?
의 manifest.json :
{
"manifest_version": 2,
"version": "1.0",
"name": "ChatBlock",
"description": "Shut down liveperson chat on mywebsite.com before it runs.",
"permissions": [
"tabs",
"webRequest",
"webRequestBlocking",
"*://sales.liveperson.net/"
],
"web_accessible_resources": ["jquery-1.10.2.min.js"],
"content_scripts": [
{
"matches": ["*://*.mywebsite.com/*"],
"js": ["jquery-1.10.2.min.js"]
}
],
"browser_action": {
"default_icon": "chatblockIcon.png"
},
"background": {
"scripts": ["avoid.js"]
}
}
자바 스크립트 파일 (avoid.js) :
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return {
cancel: true
};
},
{urls: ["*://sales.liveperson.net/*"]},
["blocking"]);
편집 : 내 매니페스트에서 JQuery와에 대한 참조를 제거했습니다. 이 도구는 여전히 똑같이 작동하지 않으므로 아래 주석은 정확했지만 필요한 것은 아니 었습니다 - thanks @ExpertSystem. 그러나 차단은 여전히 모든 웹 사이트에서 발생합니다. 나는 이전에 (이 질문을 게시하기 전에) @ ExpertSystem의 두 번째 제안에서 원하는 웹 사이트의 탭을 확인하거나 리퍼러를 확인하려고 시도했지만 제대로 작동하도록 올바른 JavaScript 구문을 찾을 수 없었습니다. 또한, 나는 "매치"속성을 사용하는 것에 매우 관심이있어서 가능한 경우 자바 스크립트가 더 일반적입니다. 나는 아직도 "성냥"이 작동하지 않는 이유에 대해 혼란스러워합니다 - 성냥과 관련하여 내가 뭘 잘못하고 있습니까? 의 manifest.json의
새로운 버전 :
{
"manifest_version": 2,
"version": "1.0",
"name": "ChatBlock",
"description": "Shut down liveperson chat on myWebsite.com before it runs.",
"permissions": [
"tabs",
"webRequest",
"webRequestBlocking",
"*://sales.liveperson.net/"
],
"content_scripts": [
{
"matches": ["*://*.myWebsite.com/*"],
"js": ["avoid.js"]
}
],
"browser_action": {
"default_icon": "chatblockIcon.png"
},
"background": {
"scripts": ["avoid.js"]
}
}
감사합니다, @ExpertSystem을, 의견을 남겨주. 귀하의 제안에 따라 manifest.json에서 jquery를 제거했습니다. 사용중인 작은 자바 스크립트 스 니펫에 필요가 없다고 말하는 것 같았습니다. 위의 편집을 참조하십시오. content_scripts 블록의 "matches"속성이 작동하지 않는 이유를 이해하는 데 여전히 관심이 있습니다. 내가 잘못 사용하고 있습니까? – hengist
당신의 "matches"속성은 작동하지만, 내용 스크립트로'avoid.js'를 주입해도 효과가 없습니다. 왜냐하면'chrome.webRequest'는 내용 스크립트에서 사용할 수 없기 때문입니다. 백그라운드 페이지의'avoid.js'는 작동하지만 요청의 출처를 구별 할 방법이 없으므로 ** 모든 ** 탭에서 liveperson.com에 대한 요청을 차단합니다. (BTW, 콘텐츠 스크립트 및 배경 페이지와 동일한 스크립트를 실행하는 것은 좋지 않습니다.) – gkalpak
업데이트 된 답변도 참조하십시오. – gkalpak