2012-09-05 4 views
0

내 확장 프로그램에서 일부 값 (사용자 ID)을 저장하고 다른 페이지에서 액세스하려고합니다. 확장 기능 내에서만 쿠키에 액세스 할 수 있으므로 쿠키를 사용하여 쿠키를 사용할 수 없습니다.다른 페이지의 확장 데이터에 액세스

할 방법이 있습니까?

+0

본질적으로 동일한 문제 ("페이지에서 확장 정보 액세스")와 [페이지의 DOM 수정]에 [사용자가 내 크롬 확장 프로그램이 설치되어 있는지 확인] (http://stackoverflow.com/questions/6293498)/check-with-user-has-chrome-extension-installed- –

+0

확장 프로그램이 다른 사이트에서 액세스 할 수 있도록 저장된 글로벌 변수를 저장 하시겠습니까? 또는 확장 프로그램이 실행되고있는 페이지에서 변수에 액세스하고 싶습니까? – Gravitate

+0

@Gravitate 예, 글로벌 변수가 필요합니다. 모든 사이트에서 액세스 할 수 있습니다. –

답변

3

미안하지만, 나는 두꺼운 것일 수도 있지만, 여전히 당신이하려는 것을 정말로 이해하지 못합니다.

다른 도메인에서 지속되는 변수를 만들려면 chrome.storage를 사용해야합니다. HTML5 localStorage와 비슷하지만 몇 가지 중요한 개선점이 있습니다 (도메인 전반에서 지속되는 것이 주요 장점 임). 당신은 설정하고 여기에 값을 얻기에 관하여 자세한 내용을보실 수 있습니다 :

http://developer.chrome.com/extensions/storage.html

을이 당신이 필요로하는 무엇을, 당신이 뭘 하려는지의 구체적인 예를 제공하기 위해 노력하고 내가 다시 시도하겠습니다없는 경우.

편집 : 예를 보려면 아래를 참조하십시오.

당신은 (함수가 선택 PARAM이다)이 같은 저장 장치에 변수를 설정할 수 있습니다

var storage = chrome.storage.local; 
var myVal="foo"; 

storage.set({'myVar': myVal}, function() { 
    alert('myVar has been saved in local storage'); 
}); 

당신은 (함수가 선택되지 않음) 이런 식으로 검색 할 수 있습니다 :

storage.get('myVar', function(items) { 
    if (items.myVar) { 
     alert(items.myVar); 
    } 
}); 

당신에게 storage.get ({ 'myVar': ''})에 의해 'myVar'가 정의되지 않은 경우 기본값을 반환 할 수 있습니다. 이렇게하면 "if (items.myVar) {"행과 함께 검사가 저장됩니다.

편집 :주의해야 할 사항은 아래를 참조하십시오.

첫째, 방법은 비동기입니다. 그래서 ...

alert("1"); 
storage.get('myVar', function(items) { 
    alert("2"); 
}); 
alert("3"); 

아마 출력 한 후 3, 다음, 2. 아니 큰 문제가 있지만 사전에 알고있는 경우 이후 구조 조정을 많이 절약됩니다.

둘째, 두 번째로 보유하는 저장 공간의 크기에주의하십시오. chrome.storage.sync (변수가 자동으로 모든 사용자 브라우저에 동기화 됨)의 저장 공간은 약 100kb로 매우 제한됩니다. (최대 512 개의 개별 변수와 같은 다른 제한도 있습니다 - 위의 문서 링크 참조). 기본적으로 chrome.storage.sync는 몇 가지 작은 변수에만 사용됩니다.

chrome.storage.local은 무제한 저장 권한을 설정하지 않는 한 약 5MB의 저장 공간을 제공합니다. chrome.storage.sync와는 달리 저장소 chrome.storage.local에는 다른 제한 사항이 없습니다.

세트가 저장 용량 한도를 초과하게되면 실패합니다.

셋째, 당신의 변수 이름으로 변수를 사용하여 작동하지 않습니다

나 같은, 당신은 정말 원/같은 것을 할 필요가, 이런 식으로 뭔가를 할 수있는 방법이를 만드는 것입니다
var myVal="foo"; 
var myVarName='myVar'; 

storage.set({myVarName: myVal}, function() { 
    alert('THIS WILL NOT WORK'); 
}); 

경우 개체에 속성을 할당하고 개체를 저장소에 저장합니다.예를 들어 :

var myVarName='myVar'; 
var mySecondVarName='mySecondVar'; 

var myVal="foo"; 
var mySecondVal="bar"; 

var obj = {}; 
obj[myVarName] = myVal; 
obj[mySecondVarName] = mySecondVal; 
//add as many vars as you want to save to the storage 
//(as long as you do not exceed the max storage space as mentioned above.) 

storage.local.set(obj); 

당신은 다음과 값을 얻을 수 있습니다 :

chrome.storage.local.get(myVarName, function (items) { 
    if (items[myVarName]) { 
     alert('You got the value that was set to myVarName'); 
    } 
}); 

아니면 mySecondVarName의 값을 원하는 경우 :

chrome.storage.local.get(mySecondVarName, function (items) { 
    if (items[mySecondVarName]) { 
     alert('You got the value that was set to mySecondVarName'); 
    } 
}); 

을 그리고 이러한 중첩 될 수 있습니다.

+0

네, 그게 내가 찾는 것 같습니다. 내가 그것을 시도하자. 작동하는지 또는 문제가 있는지 알려 드리겠습니다. 도와 주셔서 감사합니다. –

+0

그럴 경우, 나는 오늘 밤 아마 앉아서 그것을 쓸 시간을 얻 자마자 내가 가진 예와 문제로 나의 대답을 확장 할 것이다. – Gravitate

+0

예제를 추가 할 수 있지만 나중에 문제가 발생할 수 있다는 점을주의해야합니다. – Gravitate

관련 문제