상황 : 어떤 페이지에서나 작동하는 크롬 확장 프로그램을 쓰고 있습니다.jQuery가 Facebook에로드되지 않는 이유는 무엇입니까?
문제점 질문 : 페이스 북에 jQuery를로드 할 수 없어 무슨 일이 일어나고 있는지 알고 싶습니다.
가설는 :
가- jQuery를가 표면 상 별도의 JSVM 실행 컨텍스트에 크롬 확장을 통해로드되면 페이스 북이 을 메가 마인드 어떻게 든 알고 : 페이스 북은 어떻게 든 모두가 감지 몇 가지 매우 진보 된 기술을 가지고 이 표면 상 별도의 JSVM 실행 컨텍스트를 분리하고 차단합니다. jQuery를이 script.src 및 블록을 통해로드되어
-
그것을(나는 를하지 방법이 작업을 수행하지만 대답 충분하지 않은 jQuery를 하나 대신 HTTPS를 통해 제공하는 구글 CDN을 사용하는 경우).
데이터
어떻게 jQuery를로드하지 않습니다 알 수 있습니까?
I 크롬에서 콘솔을 불러옵니다 ⌘⌥J. 나는 할 때 :
> jQuery
>> ReferenceError : jQuery is not defined.
> $('body')
>> Error : Tried to get element "body" but it is not present on the page.
가 어떻게 페이스 북에 jQuery를로드하려고합니까?
방법 1 (필요하지만 실패) :
manifest.json을 파일에 다음 코드를 통해:
"content_scripts" : [
{
"matches" : ["<all_urls>"],
"js" : [
"javascript/jq/jquery-1.9.1.min.js",
"javascript/jq/non-standard.js"
],
"all_frames": true // (or false, same failure)
}
]
방법 2 (작동하지만 insufficent) :
이 SO 응답 (load jQuery into console)에 설명 된 방법을 사용하여 올바른 프로토콜을 허용하도록 수정 :
var jq = document.createElement('script');
jq.src = "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
jQuery.noConflict();
요약
가설 1은 주요 보안 취약점을 것 이상-타고 웹 브라우저의 별도의 실행 컨텍스트 (즉, 샌드 박스 휴식) 때문에, 매우 어려울 것, 그리고이 될 가능성이 없습니다 제재. 그러므로, 나는 아마도 편집증에 빠졌고 명백한 것을 간과 할 것입니다. 바라건대 여러분 중 하나가 보게 될 것입니다.
부록 (기타 관련 코드)
비 standard.js의 모든 :
$.fn.in_groups_of = function(countPerGroup) {
var groups = [], offset = 0, $group;
while (($group = this.slice(offset, (countPerGroup + offset))).length) {
groups.push($group);
offset += countPerGroup;
}
return groups;
};
더 의 manifest.json을 :
"manifest_version" : 2,
"permissions" : [
"http://*/",
"https://*/",
"tabs",
"storage",
"unlimitedStorage"
],
확장 기능이 Facebook이 아닌 다른 사이트에서도 작동합니까? –
@SimonBoudrias 좋은 질문입니다. 사실 아니. 난 단지 Stackoverflow에 체크 (하지만 그들은 자신의 jQuery를로드하는 것, 그래서 내가 거짓 긍정있어). 내 광고 확장이 Google에서도 작동하지 않습니다. 좋은 지적! 아마도 질문의 제목을 변경해야하지만, 지금은 너무 혼란 스러울 수 있습니다. –
그들이 구현 한 그 작은 $ 함수는 재미 있습니다. 단지 뭔가하는 것처럼 가장하지만 실제로는 단지 속이는 오류 메시지입니다. 아마도 그들은 페이스 북의 용기를 파헤 치려 애쓰는 사람들의 무리를 공격하려고합니다. – brysgo