0

대상 페이지에 작은 스크립트를 배치하는 Chrome 확장 프로그램을 작성하려고 시도하고 페이지의 항목에 대해 특정 작업을 수행합니다. Chrome 확장 프로그램에 익숙하지 않아서 "Hello World"경고로 시작했습니다. 이 잘 작동하지만 내가 실제로 원하는 jquery 개체에 대해 사용하는 포함됩니다.jQuery를 추가하면 실행중인 스크립트가 중지됩니다.

내 대상 페이지가 이미 jQuery를 가져 오지만 내 스크립트에서 사용하려고하면 $가 정의되지 않는다는 예외가 발생합니다. 그러나 직접 가져 오려고하면 alert도 작동하지 않습니다.

다음은 내 코드입니다. 어디에서 잘못 될지 지적 해 줄 수 있습니까?

manifest.json을

{ 
    "manifest_version": 2, 

    "name": "Hello World", 
    "description": "Simple Hello World Extension", 
    "version": "1.0", 

    "content_scripts": [ 
    { 
     "matches": ["http://localhost:46950/"], 
     "run_at": "document_end", 
     "js": ["http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", "popup.js"] 
    } 
    ] 
} 

popup.js

$(helloWorld()); 

function helloWorld() 
{ 
    alert("Hello World"); 
} 

업데이트 크롬으로 파고 : // 확장, 내가하려고 할 때 실현 아래 코드를 사용하면 확장 프로그램이 로딩되지 않습니다. d. 수동으로 다시로드하려고하면 다음 예외가 발생합니다.

'에서 확장명을로드 할 수 없습니다. 콘텐츠 스크립트에 자바 스크립트 ''을 (를)로드 할 수 없습니다.

+1

자바 스크립트 함수는 당신이 그것을 호출하지 jQuery의 준비 핸들러에 함수를 전달해야, 첫 번째 순서입니다. '$ (helloWorld)'와 _not_'$ (helloWorld()) ' –

+0

그러나'$'가 정의되지 않았기 때문에 그 특별한 문제는 발생하지 않았습니다. –

+0

@BenjaminGruenbaum 그럴 것 같지 않습니다. '$ (helloWorld);를 사용하면 아무 일도 일어나지 않습니다 (정상적으로 작동하는 시나리오에서). '$ (helloWorld());를 추가하면 잘 동작합니다. –

답변

1

좋아, 나는 나에게 무슨 일이 벌어지고 있는지에 관해서는 몇 가지 단서를 준, this 답을 찾을 수 있었다.

Chrome이 확장 프로그램의 외부 리소스에로드되지 않는 것으로 보입니다. 따라서 Google을 통해 jQuery를로드하려고하면로드되지 않고 전체 확장이 손상되었습니다.

내가이 작업을 시도한 이유는 jquery의 여러 버전이 내 확장 프로그램과 대상 사이트간에 충돌하는 문제를 일으키지 않기 때문입니다. 그러나 대답은 프로세스가 본질적으로 격리되어 실행되므로 문제가 발생하지 않아야 함을 나타냅니다. 이를 염두에두고 jquery를 직접 내 확장에 수동으로 추가하고 직접로드했습니다. 이것은 잘 작동하는 것처럼 보입니다.

manifest.json을

{ 
    "manifest_version": 2, 

    "name": "Hello World", 
    "description": "Simple Hello World Extension", 
    "version": "1.0", 

    "content_scripts": [ 
    { 
     "matches": ["http://localhost:46950/"], 
     "run_at": "document_end", 
     "js": ["jquery-2.0.3.min.js", "popup.js"] 
    }] 
} 
+1

당신은 정확합니다; (의도적으로 페이지에 스크립트를 삽입하지 않는 한) 확장 기능이 샌드 박싱되어 있으므로 충돌 문제가 발생하지 않습니다. –

-2

JQuery는 dom 요소를 예상하므로 오류가 발생합니다.

당신이 $ 같은 뭔가를 찾고있다처럼 소리

(문서) .ready() : http://learn.jquery.com/using-jquery-core/document-ready/

+0

'$ (helloWorld());를'$ (document) .ready (helloWorld);로 바꾸면 아무런 변화가없는 것 같음 –

+1

'jQuery()'는 dom 요소, 함수 또는 선택기를 기대하고있다. 그러나이 경우에는 아무 것도 제공하지 않습니다. –

+0

아니요, 문제는 올바르게로드하지 못하고 있다는 것입니다. 확장 프로그램은 외부 리소스를로드 할 수 없습니다. –