0

최근에 모든 웹 페이지에서 특정 글꼴을 사용하도록 Chrome 확장 프로그램을 만들었습니다. 그것은 잘 작동하지만 어제 (어쩌면 더 일찍) 이후로 일하는 데 사용됩니다. 확장에 대한"content_scripts"가 chrome v38에서 작동하지 않습니다. +?

키 코드는 다음과 같습니다

manifest.json 파일 내용 :

{ 
    ... 

    "content_scripts": [{ 
     "matches": ["http://*/*", "https://*/*"], 
     "js": ["font.js"], 
     "run_at":"document_start" 
    }], 
    "web_accessible_resources": ["font.css"] 
} 

font.js 파일 내용 :

var link = document.createElement("link"); 
link.href = chrome.extension.getURL("font.css"); 
link.type = "text/css"; 
link.rel = "stylesheet"; 
document.documentElement.insertBefore(link); 

font.css 파일 내용 : 웹 페이지 문서를 시작하는 동안

* { 
    font-family: "Microsoft Yahei Mono", "Microsoft Yahei", sans-serif !important; 
} 

사람이 여기에 무슨 일이 일어나고 있는지 말해 또는 js 파일을 실행하는 다른 방법을 제시 할 수 있습니까?

+0

-1 : "중지 된 작업"및 코드 없음, 미안하지만 대답 할 수 없습니다. 코드를 포함 시키십시오. – Xan

+0

콘텐츠 스크립트의 코드를 입력하십시오. 그렇지 않으면 오류의 원인을 알 수 없습니다. 대부분의 경우,'document_start'에서 실행될 때 스크립트는 아직로드되지 않았기 때문에 스크립트가 작동을 멈추지 만, 코드를 보지 않고서는 스크립트를 사용하는 것은 불가능합니다. –

+0

@Xan 코드를 추가했습니다. 감사. – herohuyongtao

답변

2

Chrome은 Chrome 표준에서 DOM 표준을 따르며 .insertBefore이 필수 인수를 생략 할 때 예외를 throw합니다 (https://crbug.com/419780 참조).

는 코드를 수정하거나 내가 스타일 시트를 삽입하는 대신 콘텐츠 스크립트의 "css" 키를 사용하는 것이 좋습니다

document.documentElement.insertBefore(link, null); 
// or equivalently, 
document.documentElement.appendChild(link); 

사용합니다. 그러면 더 이상 font.js이 필요하지 않으며 설치시 스타일 시트가 즉시 적용됩니다.

{ 
    "manifest_version": 2, 
    "name": "my extension", 
    "version": "1.0", 

    "content_scripts": [{ 
     "matches": ["http://*/*", "https://*/*"], 
     "css": ["font.css"], 
     "run_at":"document_start" 
    }] 
} 
+0

매력처럼 작동하십시오! 많이 감사합니다. – herohuyongtao

+0

fyi : 실제로 여러 웹 페이지에서 원래 글꼴을 사용할 수있게해야하므로 실제로 font.js를 사용해야합니다. – herohuyongtao

관련 문제