2012-08-29 3 views
1

크롬 확장 프로그램을 만들고 있습니다. 확장 프로그램이 실행 중일 때 javascript를 사용하여 팝업 페이지에서 몇 가지 콘텐츠 스크립트 파일을 추가하거나 제거하고 싶습니다.Chrome 확장 프로그램, 콘텐츠 스크립트, 자바 스크립트 파일을 동적으로 추가하거나 제거하려면 어떻게해야합니까?

내 확장 프로그램에서 사용자는 팝업 페이지에서 색상을 선택합니다. 5 가지 색상이 있습니다. 그래서 5 개의 자바 스크립트 파일을 가지고 있습니다 - 각 색상마다 하나씩.

그래서 자바 스크립트 코드는 팝업 페이지에서 실행중인 스크립트 자바 스크립트 파일을 변경합니까?

답변

3

당신이 5 개 JS 파일, 5 가지 색상 각각에 대하여 하나가있는 경우 먼저 떨어져,이 "Clone And Modify Programming" 난다 -. 될 수있는 나쁜 습관이다

할 스마트 것은 일을하는 것입니다 색상을 매개 변수로 끄는 "DRY"코드가있는 JS 파일입니다. "Dont Repeat Yourself" (sic)을 참조하십시오.


내선 번호 배경에서 전체 콘텐츠 스크립트를로드하려면 "Programmatic injection"을 참조하십시오. 이로드되면


추가 또는 동적으로 자바 스크립트 파일을 제거에 관해서는

...

  1. 당신은 파일을 제거하지 수 있습니다. <script> 노드에 있더라도이를 삭제하면 파싱 된 함수, 변수, 타이머, 이벤트 리스너 등은 여전히 ​​메모리에서 활성화됩니다.

    1. 명명 된 개체를 덮어 쓸 수 있습니다. 예를 들어 파일 '1.js이 전체적으로 x=7;을 설정하면 나중에 파일 '2.js을로드하여 x=11;을 설정할 수 있습니다.
    2. 명명 된 타이머는 취소 할 수 있지만 각 타이머는 명시 적으로 지정해야합니다.
    3. 알려진 이벤트 수신기를 취소 할 수 있지만 다시 의도적으로 코드를 작성해야합니다.
    4. 은 익명 개체 ((function() {... ...})())를 재정의 할 수 없습니다.
    5. 수 없습니다 익명 타이머를 취소하십시오.


    대부분의 경우이 모든 문제는 가치가 있습니다. 필요하지 않은 곳으로 코드를 설계하는 것이 가장 좋습니다.

  2. JS (또는 다른 종류의 파일)를 동적으로 추가 할 수 있습니다 (아래 참조).


동적 JS 파일을 추가하려면 ...

  1. 파일 (들) 귀하의 의 manifest.json 파일의 web_accessible_resources 섹션에 나열되어 있는지 확인합니다.

    { 
        "manifest_version": 2, 
        "content_scripts": [ { 
         "exclude_globs": [ ], 
         "include_globs": [ ], 
         "js":    [ "MyContentScript.js" ], 
         "matches":   [ "http://YOUR_SERVER.COM/YOUR_PATH/*" ] 
        } ], 
        "name":   "Dynamically load JS, demo", 
        "version":  "1", 
        "web_accessible_resources": [ 
         "MyJavascript_1.js", 
         "MyJavascript_2.js", 
         "MyJavascript_3.js" 
        ] 
    } 
    


  2. 그런 다음, 콘텐츠 스크립트 (MyContentScript.js가), 당신은과 같이, chrome.extension.getURL을 사용할 수 있습니다 :

    var D   = document; 
    var scriptNode = D.createElement ('script'); 
    scriptNode.type = "text/javascript"; 
    scriptNode.src = chrome.extension.getURL ("MyJavascript_2.js"); 
    
    var targ = D.getElementsByTagName('head')[0] || D.body || D.documentElement; 
    targ.appendChild (scriptNode); 
    
예를 들어
관련 문제