1

간단한 코드를 실행하여 JS의 HTML 페이지 본문에있는 문자열을 대체하려고했습니다.브라우저에서 자바 스크립트 실행 콘솔 대 북마크

document.body.innerHTML = document.body.innerHTML.replace(/foo/g,"bar"); 

위의 코드는 브라우저 콘솔 (파이어 폭스와 크롬에서 테스트)에서 잘 실행,하지만 난 모든 스타일 요소를 잃는 javascript:의 접두사, 페이지 나누기와 자바 스크립트 북마크를 통해 같은 실행할 때.

콘솔에서 또는 북마크릿을 통해 실행되는 JS 코드가 동일한 환경에서 실행되는 것처럼 코드가 다르게 작동하는 이유가 궁금합니다.

+3

할당의 반환 값이 페이지 콘텐츠를 대체하고 있음을 나타내는 id는 무슨 일이 발생합니까? 마지막에 "; return false"를 추가하여 피할 수 있습니다. – diegog

답변

2

여기서 일어나는 일을 실현하는 가장 쉬운 방법은 입력란에 javascript:"Hello world"을 입력하고 Enter 키를 누르는 것입니다. DOM을 건드리지 않았더라도 페이지 내용이 대체됨에 유의하십시오.

북마크릿의 반환 값이있는 경우 페이지 콘텐츠로 넘겨지기 때문입니다. 이 경우 (document.body.innerHTML = document.body.innerHTML.replace(/foo/g,"bar"))은 새로운 innerHTML 으로 평가됩니다. 어느 쪽이 문서 본문의 innerHTML 일 뿐이므로 전체 문서 HTML이 교체 될 때 stle 정보가 손실됩니다.

훨씬 더

이 작업을 수행합니다 : 모든 var의 개인 만들기의 추가 보너스가 있습니다

javascript: (function(){document.body.innerHTML = document.body.innerHTML.replace(/foo/g,"bar") }() 

합니다. 또는 @diegog가 제안한대로 북마크 릿에 return false;을 붙이면됩니다.

1. 자바가 아니라면 평등 연산자가 값을 반환합니다. 실수로 ==의 성가심을 느끼게합니다.

관련 문제