1

저는이 작업을 수행하기 위해 지난 2 일 동안 노력해 왔으며 마지막 수단으로 여기에서 묻습니다. StackOverflow에서 메시지 전달, 일부 블로그 및 Google의 메시지 전달 페이지와 관련된 모든 관련 게시물을 살펴 보았습니다.LocalStorage 메시지 전달 문제 - 거의 작동합니다.

내가 만든 APP는 무언가를 포함하는 페이지에서 링크를 찾아 시작 부분을 교체합니다. 예를 들어, url에서 'google.com'을 찾고 'ask.com'으로 시작 부분을 바꿉니다.

내가 겪고있는 문제는이 변수를 localstorage 변수에 저장하려고한다는 것입니다. 그러나 페이지가 새로 고쳐지면 전달 된 새 URL이 사용되지 않습니다. 디버깅을 쉽게하기 위해 단순화 된 버전을 만들기 위해 약간의 혼란을 제거했습니다. 제발 도와주세요! 곧 머리카락도 남지 않을거야!

localStorage["talktest1"]에는 popup.js에서 전달 된 새 URL로 변경되어야하는 URL이 들어 있습니다. 그런 다음 교체 스크립트가로드 될 때 새로운 talktest1 변수를 사용해야하지만 기존 'www.google.co.uk'변수는 계속 사용됩니다.

Manifest.js :

{ 
    "name": "Talk Talk", 
    "version": "1.0", 
    "description": "Tests stuff.", 
    "browser_action": { 
    "default_icon": "img/icon16.png", 
    "default_popup": "popup.html" 
    }, 
    "options_page": "options.html", 
    "permissions": [ 
    "tabs", "*://*/*" 
    ], 
    "background": { 
    "scripts": ["js/jquery-1.7.2.min.js","js/bg.js"] 
    }, 
    "icons": { "16": "img/icon16.png", 
       "48": "img/icon48.png", 
       "128": "img/icon128.png" }, 
    "content_scripts": [ 
    { 
     "matches": ["*://*/*"], 
     "js": ["js/jquery-1.7.2.min.js","js/bg.js"], 
     "run_at": "document_end" 
    } 
    ] 
} 

popup.js :

$(document).ready(function() { 

    chrome.extension.getBackgroundPage().alert_this(); 

    $('.link_change').click(function() { // when a link is clicked - url is grabbed from a 'href' 

     chrome.extension.sendRequest({localstorage: "http://www.something.com"}, function(response) { 
      var email = response.value; 
      chrome.extension.getBackgroundPage().alert_this(); 
     });  

     return false; 
    }); 


}); 

bg.js :

if(!talktest1){ 
    var talktest1; 
} 
if(!localStorage["talktest1"]){ 
    localStorage["talktest1"] = "http://www.google.co.uk"; 
} 

talktest1 = localStorage["talktest1"]; 


chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {  
     localStorage["talktest1"] = request.localstorage; 
     talktest1 = request.localstorage; 
     sendResponse({value: localStorage.talktest1}); 
    } 
); 

function alert_this(){ 
    alert("localstore|" + localStorage["talktest1"]); 
    alert("talktest1|" + talktest1); 
} 


$("a[href*='google.com']").each(function(){ 
    this.href = this.href.replace('http://www.ask.com',talktest1); 
}); 
+0

왜 popup.html에서 localstorage를 설정하지 않습니까? – Oliver

+0

popst.html에서 localstorage를 설정하면 해당 도메인에 대해서만 변수가 설정됩니다. 앱의 나머지 부분에는 여전히 불만이 남아 있습니다. 따라서 다른 URL의 새 탭에서이 URL을 사용하면 동일한 값을 유지할 수 없습니다. – Chris

답변

0
  1. 왜 당신이 봇으로 bg.js 사용합니까 h 배경 페이지와 내용 스크립트? 그것은 아무 의미가 없습니다. chrome.extension.onRequest은 콘텐츠 스크립트에서 사용할 수 없으며 콘솔에서 오류가 발생합니다. $("a[href*='google.com']")... 부분을 다른 스크립트 (예 : content.js)에 넣고 manifest.json을 업데이트하십시오.

  2. 당신은 manifest_version을 설정하지 않은 기본이 background 설정을 사용할 수없는 1 (source)입니다 만 background_page 있었다.

  3. $('.link_change').clickpopup.js은 클릭되는 팝업 내부의 링크에만 반응하며 사이트의 링크에는 반응하지 않습니다. 그게 당신이 의도 한 것입니까? Popup은 현재 자신의 삶을 살아가고 있지만 현재 열려있는 웹 사이트에 대해 전혀 알지 못합니다.

  4. 나는 alert()을 배경 페이지에서 표시 할 수 없다고 생각합니다. alert_this() 기능이 작동합니까?

  5. 팝업 또는 bg 페이지에 오류가 있습니까? 디버깅 해 봤어? onRequest 청취자 함수 (bg.js)에 중단 점을 넣고 그곳에서 어떤 일이 발생하는지 확인해야합니다 (request.localstorage, ok? 값이 올바르게 설정되어 있습니까?). 배경 페이지를 디버그하려면 Chrome 확장 프로그램 페이지의 확장 프로그램에서 Inspect active views 옵션을 사용하십시오.

+0

내가하려는 일은 다음과 같습니다. 확장 프로그램을 설치하면 대체 URL로 기본 URL이 사용됩니다. 그런 다음 popup.html에서 클릭 한 링크에 따라 확장 프로그램의 대체 URL을 변경해야합니다. 그러면 열리거나 새로 고침 한 페이지에서 자동으로이 새 URL을 사용합니다. 저는 localSorage를 사용하려고했습니다. 그러나 popup.html은 background.html과 아무런 관련이 없기 때문에 어떤 이유에서든 localStorage에 액세스 할 수있는 것 같지 않습니다. 혼란 스럽습니다. 나는 당신이 말한 것을했습니다. content.js에 $ ("a [href * = 'google.com'] ')을 추가했습니다. 도와주세요 !! – Chris

+0

실제로 배경 페이지가 필요 없다고 생각합니다. 내가 생각한 유일한 이유는 대체 될 URL에 대해 localStorage 값과 상호 작용하는 것입니다. – Chris

+0

background.html에 다음을 추가하려고했습니다. function startup() { \t localStorage.setItem ("the_prox", " http://www.lalala.com "); } 다음과 같이 content.js에 대한 배경에는 여전히 localStorage 항목이 없습니다. chrome.extension.getBackgroundPage(). startup(); – Chris