3

Google 크롬을위한 콘텐츠 스크립트 확장 프로그램을 만들고 있는데, 웹 사이트 페이지에 기능을 추가합니다. 몇 가지 옵션을 추가하고 싶습니다.별로 큰 문제가 아니며, 두 개의 문자열 만 필요합니다 (어느 것도 민감한 사용자 데이터가 아닙니다).옵션 사용 가능 콘텐츠 스크립트 백그라운드 페이지가없는 Chrome 확장?

this answer에서 백그라운드 페이지가 필요하다고 가정합니다.이 페이지는 내 확장 프로그램에 추가하지 않을 것입니다. 불필요한 가중치를 얻지 않기를 바랍니다.

정말 배경 페이지가 필요한가요? 그렇지 않으면 옵션 페이지가있을 수 있으며 어떤 저장소를 사용할 수 있습니까?

답변

2

UPDATE ...
를 작동하면 너무 나쁜 소리가 나지 않는다
http://code.google.com/chrome/extensions/storage.html

옛날 방식
내가하는 일은 내 저장소에서 로컬 저장소에서 필요한 설정을 가져온 스크립트가있는 페이지를 가리키는 iframe을 만든 다음 콘텐츠 스크립트가 가져 오는 메시지의 부모에게 보냅니다. 그게 쓰레기 설명 이었어. 코드가 더 잘한다.) .......

내용 스크립트

// create the iframe for our page that sends the settings 
var el = document.createElement("iframe"); 
el.setAttribute('src', chrome.extension.getURL("gimmeSettings.html")); 
el.style.visibility="hidden"; 
document.body.appendChild(el); 

// create the listner that listens for a message from our page that sends the settings 
window.addEventListener("message", receiveSettings, false); 

// function that gets called when we recieve a message from the page that sends the settings 
function receiveSettings(event) { 
     //check to make sure the message came from our page 
     if (event.origin !== "chrome-extension://"+chrome.i18n.getMessage("@@extension_id")) return; 

     //message came from our extension, do stuff with it 
     console.debug(event.data); 

     // clean up 
     window.removeEventListener("message", receiveSettings, false); 
     el.parentNode.removeChild(el); 
} 

gimmeSettings.html의 JS

// post the message with our settings 
parent.postMessage(localStorage.getItem("testing"), "*"); 

Options.html의 JS

localStorage.setItem("testing","bleh"); 

매니페스트

{ 
    "name": "Getting at an extensions local storage from a content script", 
    "description" : "Getting at an extensions local storage from a content script. Be aware that other pages/extensions can use this to get at your settings, but not change them...so dont include sensitvie data.", 
    "content_scripts": [ 
     { 
      "matches": ["<all_urls>"], 
      "js" : ["myscript.js"], 
      "run_at":"document_idle" 
     } 
    ], 
    "permissions": [ 
     "tabs", "<all_urls>" 
    ], 
    "manifest_version": 2, 
    "web_accessible_resources": [ 
    "gimmeSettings.html" 
    ], 
    "options_page": "options.html", 
    "version":"1.0" 
} 

몇 가지주의해야 할 ....
다른 페이지 및 확장이 용이하므로이 방법으로 민감한 데이터를 사용 해달라고, 또한 확장의 설정을 얻기 위해 이것을 사용할 수 있습니다.
내가 말할 수있는 최선의 방법은 그 사람들이 그 페이지를 통해 설정을 변경할 수있는 방법이 없다는 것입니다.
메니저 버전 2를 사용 중이며 페이지 gimmeSettings를 액세스 가능하도록 설정했습니다. 차이점을 알지 못하는 경우 버전 2를 추가하면 실제로 읽어야합니다. ... http://code.google.com/chrome/extensions/trunk/manifestVersion.html

그리고 작업 예제를 원할 경우 .....
http://forum.valorsolo.com/viewtopic.php?f=36&t=375

+0

감사합니다. 좋은 소식입니다. 또한, 방금 라이브러리에 포장 될 수 있다고 생각했습니다 (이전에 Chrome 개발자가 더 예쁘게 API를 만들었다면 사용하게 될 것입니다). 사실이 대답은 나를 위해 옵션 페이지를 가진 확장을 만들고 싶습니다. :) 축하합니다. –

+0

오, 나는 생각이났다 : 어쩌면 민감한 설정이 일부 [비대칭 encription] (http://www.hanewin.net/encrypt/) (링크가 해독을 구현하지 않지만 시작점 임)을 사용하여 전송 될 수 있습니다. 그러나 그것은 많은 해킹의 지옥처럼 보입니다. 그러나 재미있게 들린다! 이런 일을하는 데 하루 더 많은 시간을해야합니다. –

0

방금 ​​아이디어가 있었지만 소리가 맞거나 이해가되는지 모르겠습니다.

content_script에서 HTML5 localStorage에 액세스하여 거기에 두 개의 문자열을 저장할 수 있다고 생각합니다. Message Passing을 통해 content_script 중 하나가 (옵션 페이지에서) 변경된 다음 localStorage을 업데이트하도록 말할 수 있어야합니다.

유일한 옵션일까요? 그것은 ..... 당신은 지금 스토리지 API를 사용할 수있는 크롬 (20)으로

관련 문제