2016-06-15 3 views
1

현재 크롬 확장 버전은 현재 탭에서 문자열 집합을 추출하고 특정 URL로 새 탭을 열고 계속해서 문자열을 삽입하고 jQuery를 사용하여 양식을 제출합니다. 내가 가진 문제는 나중에 별도의 탭을 열고 양식이있는 URL로 이동하면 데이터를 다시 삽입하고 양식을 제출하는 것입니다. 이 작업은 계속해서 수행되므로 크롬 확장을 사용하여 웹 사이트를 자동화하지 않고 사용할 수 있습니다.sendMessage에 크롬 확장을 한 번만 가져 오는 방법은 무엇입니까?

문자열을 보내는 background.js의 함수입니다.

chrome.browserAction.onClicked.addListener(function (tab) { //Fired when User Clicks ICON 
    if(zip){ 
     zipCode = zip; 
     zip = null; 
    }else{ 
     zipCode = prompt('Zip code'); 
    }  
    if(/^\d{5}(-\d{4})?$/.test(zipCode)){ 
     var newURL = "https://www.medicare.gov/find-a-plan/questions/home.aspx?search"; 
     chrome.tabs.create({ url: newURL }); 
     chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
      id = "2136760320";   
      if (changeInfo.status == 'complete') { 
       chrome.tabs.query({active: true, currentWindow: true}, function(tabs){ 
        chrome.tabs.sendMessage(tabId, {zip: zipCode, pass: pwd, drugID: id}, function(response) {}); 
       }); 
      } 
     }); 
    } 
}); 

이 내용은 URL과 일치하며 jquery와 함께 삽입되는 내용입니다. Chrome 확장 프로그램이 페이지를 연 경우에만 실행해야합니다.

var pwd = ""; 
var id = ""; 

var onMessageHandler = function(message, sender, sendResponse){ 
    pwd = message.pass; 
    id = message.drugID; 
    $("#saveWorkID").val(id); 
    var date = pwd.split("/"); 
    var month = date[0]; 
    if (month.length < 2) month = "0" + month; 
    var day = date[1]; 
    var year = date[2]; 
    $("#month").val(month); 
    $("#day").val(day); 
    $("#year").val(year); 
    $("#lnkFind span").trigger("click"); 
} 
chrome.runtime.onMessage.addListener(onMessageHandler); 

위의 페이지 이전 페이지에는 2 개의 다른 콘텐츠 스크립트가 실행 중이지만 필요한 경우 확실하지 않습니다.

가 보낸 메시지를 읽으려고에서 콘텐츠 스크립트를 방지하는 방법에 어떤 도움을 주시면 감사하겠습니다

{ 
    "manifest_version": 2, 

    "name": "PDP Lookup", 
    "description": "Lookup the PDP druglist of a current user", 
    "version": "1.0", 
    "icons": {"48": "icon.png", 
      "128": "icon128.png" }, 
    "browser_action": 
    { 
    "default_icon": "icon.png" 
    }, 
    "background":{ 
    "scripts": [ 
     "jquery.js", 
     "background.js" 
    ] 
    }, 
    "content_scripts": [ 
     { 
      "matches": [ 
       "https://www.medicare.gov/find-a-plan/questions/home.aspx?search" 
      ], 
      "js": [ 
       "jquery.js", 
       "stage1.js" 
      ] 
     }, 
     { 
      "matches": [ 
       "https://www.medicare.gov/find-a-plan/questions/enter-your-information.aspx" 
      ], 
      "js": [ 
       "jquery.js", 
       "stage2.js" 
      ] 
     }, 
     { 
      "matches": [ 
       "https://XXX.XXX.XXX/XX*" 
      ], 
      "js": [ 
       "jquery.js", 
       "search.js" 
      ] 
     }, 
     { 
      "matches": [ 
       "https://plancompare.medicare.gov/pfdn/PlanFinder/DrugSearch" 
      ], 
      "js": [ 
       "jquery.js", 
       "stage3.js" 
      ] 
     } 

    ], 
    "permissions": [ 
    "tabs", 
    "https://*/*", 
    "http://*/*" 
    ] 
} 

manigest.json에게 있습니다.

+0

이 질문에 대한 답변이있는 것 같습니다. http://stackoverflow.com/questions/20046803/remove-listener-when-given-url-is-visited-after-using-chrome-tabs-onupdated-addl –

답변

1

대신 매니페스트 파일을 통해 컨텐츠 스크립트를 주입,,, chrome.tabs.create의 콜백 함수에

chrome.tabs.create({ url: newURL }, function(tabcreated){ chrome.tabs.executeScript(tabcreated,{file:"jquery.js"},function(){ chrome.tabs.executeScript(tabcreated,{file:"stage1.js"}); }); })

이 당신의 확장 탭을 생성 한 후에 만 ​​주입 될 것입니다 이런 식으로 뭔가를 그것을 주입 시도 그 URL을 가진 탭이 다른 방법으로 열리지 않을 때.

관련 문제