2009-08-13 8 views
3

표준 HTML 스타일 태그를 통해 CSS 파일을 포함합니다.CSS 코드 (크로스 도메인, 자바 스크립트)로 CSS 클래스에 액세스

그런 다음 CSS 클래스와 속성에 액세스하려면 자바 스크립트 코드가 필요합니다. IE와 크롬에서 모두 잘 간다하지만, 파이어 폭스에서이 예외를 throw :

캐치되지 않는 예외 : 보안 오류 (NS 오류 DOM 보안 ERR)

여기에 자바 스크립트 코드입니다 :

for (var i = 0; i != window.document.styleSheets.length; i++) { 
    rules = window.document.styleSheets.item(i); 
    if(rules.href.indexOf('someurl.com')){ 
     break; 
    } 
} 
return rules.cssRules || rules.rules; 

가 IE, Chrome 및 Safari에서는 잘 작동하지만 Firefox 및 Opera에서는 작동하지 않습니다.

어떤 아이디어가 있습니까? 사전

+2

FireFox 3.5에서 작동하는 것 같습니다. 사용중인 모든 코드를 게시 할 수 있습니까? 당신이 제공 한 스 니펫이 기능의 내부에있는 것 같습니다. 해당 기능이 호출되는 위치를 제공 할 수 있습니까? – Tres

+0

자바 스크립트를 고칠 수는 없지만, css 파일을 로컬로 작성하기 위해 아약스로 호출하는 처리 클래스 (PHP, Java, 뭐든간에)를 작성할 수는 있을까요? 브라우저의 보안 제한 사항을 처리합니다. – Pat

답변

3

JavaScript는 모든 도메인에서 참조 할 수 있지만이를 실행하는 문서의 정확한 도메인에만 변경 사항을 적용 할 수 있습니다. 정확한 도메인으로는 프로토콜에서부터 첫 번째 디렉토리 바로 앞에있는 모든 것이 동일해야합니다.

JavaScript를 사용하여 다른 도메인에 액세스 할 수 없도록되어 있습니다. 왜 이것이 IE 나 Chrome에서 작동하는지 모르겠지만 그렇게해서는 안됩니다. CSS가 JavaScript를 실행하는 페이지와 다른 도메인에서 온 경우 보안 오류가 발생합니다.

여기 실제 질문은 무엇입니까? 어떤 속성이 항목입니까? 나는 당신의 코드에서 정의 된 것을 보지 못했고 전에 사용 된 것을 보지 못했습니다. 왜 보안 문제가 제기되지 않은 DOM에 스타일 변경을 직접 적용하는 대신 JavaScript로 스타일 시트를 변경하려고합니까?

+0

또한 링크 태그를 사용하여 로컬 CSS를 추가하더라도 HTTP가로드 될 때만 스타일 시트에 액세스 할 수 있습니다 ... 로컬 파일 // 액세스가 작동하지 않음 (크롬에서는 적어도) – kofifus

0

에서 덕분에 당신이와 자바 스크립트와 스타일을 변경할 수 있습니다

elm.style.display = "none"; 

그러나 그 쓰기 만, 스타일을 읽기 위해 quirksmode getStyles을 볼 수 있습니다.

@import vs 또는 자바 스크립트 뒤에 스타일을 배치하는 등 스타일을 배치하는시기에 따라 달라질 수 있습니다. 특정 경쟁 조건이 발생할 수 있으므로 window.onload 이후에 스타일을 가져 오십시오.

+0

element.style.XXX에 대한 참조는 개별 요소에 대해 <... style = "...">의 HTML과 동일합니다.이 요소는 계단식 스타일 규칙에 따라 해당 개별 요소의 다른 모든 요소보다 우선합니다. 스타일 시트 (document.styleSheets [N])에 지정된 스타일 "규칙"에 대한 참조가 아니며 한 번에 여러 요소를 변경하지 않습니다. –

0

FF로로드되기 전에 스타일을 변경하려고한다고 말하고 싶습니다. Javascript 호출을 닫기 태그 바로 앞으로 이동하고 window.onLoad 이벤트에서 해당 메서드를 만들거나 JS 라이브러리를 사용하는 경우 해당 메서드를 사용할 수 있습니다.