2017-10-18 6 views
3

잘 작동하고있는 앱에서 크롬 저장 공간을 사용하고 있습니다. 이 과정은 매우 간단합니다. 사용자가 이메일과 비밀번호를 입력하면 앱에서 XHR 요청을 사용하여 확인하고 chrome.storage.local.set을 사용하여 세션을 유지 관리합니다. 세션이 설정되면 chrome.runtime.reload()을 사용하여 앱을 다시로드합니다. 모든 재로드시에 checkLogin 함수를 사용하여 세션이 활성 상태인지 확인합니다. 그것은 잘 작동했다. 하지만 지금은이 오류를 받고 있어요 :chrome.runtime.reload() - 패키지 된 앱 후에 chrome.storage.local.get이 비어 짐

enter image description here

이 스토리지는 스토리지의 키워드를 찾을 수없는 응용 프로그램 및 응용 프로그램을 다시로드하고 정의되지 않은 오류를 반환 한 후 빈 얻을 것으로 보인다. 여기

사용자가 인증되면 호출되는 코드 : 응용 프로그램 내가 저장 한 세션 검사를 다시로드

postLogin = function (resultData) { 
if (resultData.authStatus == 1) { 
    chrome.storage.local.set({'userData': resultData}, function(){ 
     console.log("session saved"); 
    }); 
    chrome.runtime.reload() 
} 
else { 
    $("#result").html(resultData.authMsg); 
    $("#result").attr('style', 'display: inline-block !important'); 
} 
return false 
} 

되면 :이 시점에서

checkLogin = function() { 
console.log(chrome.storage); 
chrome.storage.local.get("userData",function(result) { 
    userData = result.userData; 
    if (userData && userData.authStatus == 1) { 
     console.log("--- user signed In ---") 
     return true; 
    } 
    console.log(" ---- unable to find user session ----") 
    $("#auth-dialog").attr('style', 'display: inline !important'); 
    return false; 
}) 
} 

을 내가 오류를 받고 있어요 위 스크린 샷에 첨부되어 있습니다. 또한 console.log(chrome.storage);을 사용하여 저장소 상태를 확인하고 undefined를 반환했습니다. 이상한 일은 일단 내가 수동으로 코드의 .get 부분이 잘 작동 애플 리케이션을 다시 시작합니다. 처음에는 저장된 저장소 값을 가져 오기 위해 페이지를 다시로드해야한다는 오류가 표시됩니다.

매니페스트 :

{ 
    ... 
    "permissions": [ "unlimitedStorage", "clipboardRead", "clipboardWrite", "nativeMessaging" , "storage" ], 
} 

UPDATE : 포스트 제목에서 언급 한 바와 같이

문제가 chrome.storage하지입니다. chrome.runtime.reload()의 주요 문제. 초기 앱 출시 이후 앱이 chrome.부터 시작하여 다시로드되는 즉시 chrome.runtime.reload()으로 전화 할 때마다 작동하지 않습니다.

+0

앱입니까, 확장 프로그램입니까? 그것은 오직 하나 여야합니다. 적절한 태그 만 포함하도록 질문을 편집하십시오. – Makyen

+0

주제에 관한 질문을 편집하십시오 : 문제가 중복되는 [mcve]를 포함하십시오. Chrome 확장 프로그램 또는 Firefox WebExtensions의 경우 * manifest.json * 및 백그라운드, 콘텐츠 및/또는 팝업 스크립트/HTML 중 일부와 웹 페이지 HTML/스크립트를 포함시켜야합니다. 디버깅 도움말을 찾는 질문은 (1) 원하는 동작, (2) 특정 문제 또는 오류 및 (3) 코드를 재현하는 데 필요한 가장 짧은 코드를 포함해야합니다. 질문 자체에. 또한 [여기에 어떤 주제를 물어볼 수 있습니까?] (/ help/on-topic) 및 [ask]를 참조하십시오. – Makyen

+0

코드, 오류 및 데이터를 이미지가 아닌 ** 텍스트 ** ([using code formatting] (// stackoverflow.com/editing-help#code))로 추가하십시오. 이미지 : A) 테스트를 위해 코드/오류/데이터를 복사 및 붙여 넣기하는 것을 허용하지 않습니다. B) 코드/오류/데이터 내용을 기반으로 검색을 허용하지 않습니다. 및 [기타 여러 가지 이유] (https://meta.stackoverflow.com/a/285557)를 참조하십시오. 일반적으로 코드/오류/텍스트 형식의 데이터 >>>> 이미지로 코드/오류/데이터 >> 아무것도. 이미지는 단지 텍스트 코드/오류/데이터에 의해 전달되지 않는 중요한 것을 추가하는 경우 * 코드 형식의 텍스트 이외에 사용되어야합니다. – Makyen

답변

2

해결책을 찾지 못했지만 해결 방법을 찾았습니다. 원래의 가정은 앱을 다시로드 한 후 chrome.storage이 작동하지 않는다는 것입니다. 그게 내 앱이 제일 먼저 확인하기 때문입니다. 더 많은 디버깅을 한 후에 내가 chrome.runtime.reload()을 호출 할 때마다 chrome.에서 시작하는 응용 프로그램이 다시로드 되자마자 호출된다는 것을 알았습니다. 문제는 앱을 다시로드하는 것입니다. 테스트하려면이 앱에서 모든 항목을 제거했습니다. console.log(chrome.runtime.getManifest()) 매니페스트 세부 정보가 표시된 로그 메시지와 chrome.runtime.reload()이라는 클릭 이벤트에 대한 하나의 버튼 "다시로드"가 있습니다. 초기 앱 실행시 매니페스트 세부 정보를 보여주는 콘솔 로그 메시지로 모든 것이 잘 작동합니다. 내가 새로 고침 단추를 클릭하고 앱을 다시로드 할 때 그것을 보여줍니다

Uncaught TypeError: chrome.runtime.getManifest() is not a function

내가 같은 정의되지 않은 오류가 chrome.storage.local.set/get 같은 다른 기능을 사용했습니다.

이 문제를 해결하려면 응용 프로그램을 다시로드하고 이전 창을 닫지 않고 새 창을 만드는 것이 좋습니다.

chrome.app.window.create(
    'main.html', 
    opt); 
setTimeout(function() { 
    //close previous window 
}, 300); 

동일한 문제가있는 사람이라면 누구에게도이 방법을 사용하는 것이 좋습니다.

+0

비슷한 문제가 있습니다. 가끔씩 Chrome 앱이 너무 빨리 실행되고 chrome.runtime.getManifest 또는 chrome.runtime.getPlatformInfo가 정의되지 않은 경우에도 마찬가지로 솔루션을 사용해야합니다. 나는 크롬 코드를 추적하여 다음과 같이 발견했다. – Imskull

+0

"apiFunctions.setHandleRequest ('getManifest', function() { return runtimeNatives.GetManifest(); }))" 비동기 코드로 인해 Chrome 버그가 발생 했습니까? 그래도 나는 잘 모른다. – Imskull