2012-11-30 13 views
10

यहाँ के लिए दो बार या अधिक पूर्ण स्थिति हो रही है मेरी स्क्रिप्ट है, जो प्रत्येक यूआरएल की जाँच करने के onUpdated.addListener का उपयोग करता है:chrome.tabs.onUpdated.addListener प्रत्येक पृष्ठ

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {   
alert(changeInfo.status); 
if (changeInfo.status == 'complete') { 
if (tab.url.indexOf("in.yahoo.mail") !== -1) { 
alert(tab.url); 
chrome.tabs.update(tabId, { url: "https://accounts.google.com/ServiceLogin" }); 
    //injectToTab(tab); 
    } 
} 
}); 

और यहाँ प्रकट कोड है:

{ 
    "name": "LeoPlugin For Test", 
    "version": "1.6", 
    "manifest_version": 2, 
    "content_security_policy": "script-src 'self'; object-src 'self'", 
    "description": "Extension to Automate.", 
    "background": { 
    "scripts": ["js/eventPage.js"], 
    "persistent": false 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["js/eventPage.js"] 
    } 
    ], 
    "icons":{"48":"images/bob48.png", "128":"images/bob128.png"}, //Define any icon sizes and the files that you want to use with them. 48/128 etc. 
    "browser_action": { 
    "default_icon": "images/bob.png",  // What icon do you want to display on the chrome toolbar 
    "default_popup": "testwatch.html"  // The page to popup when button clicked. 
    }, 
    "permissions": [ 
    "tabs", "http://*/*","https://*/*"    // Cross Site Access Requests 
    ] 

} 

उपरोक्त कोड में कुछ भी गायब है जो एक से अधिक बार 'पूर्ण' स्थिति को रोकने से रोक सकता है।

<html> 
    <head> 
    <title>Leo Chrome Extension</title> 

    <link href="css/main.css" rel="stylesheet" type="text/css" /> 
    <link href="css/fonts.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="jquery/jquery-1.4.2.min.js"></script> 
    <script type="text/javascript" src="jquery/jquery-ui-1.8.2.custom.min.js"></script> 
    <!--<script type="text/javascript" src="js/Pluginjshelper.js"></script>--> 
</head> 
<body class="inner_bg"> 
     <div class="grey-panel"> 
      <div> 
      <div class="user-pic"> 
       <img src="Images/leo-logo.png" width="70" height="50" /> 
      </div> 
      <h3> 
       Leo Extension</h3><input name="ok" type="button" class="btn" id = "button123" value="OK"/> <!--onclick = "getCPRepGraph()" --> 
       <input name="chkEnable" id="chkPluginEnable" type="checkbox" value="" class="check" /><span class="lbl">Enable</span> 
      </div> 
      <div class="clear"> 
      </div> 
      <div> 
       <h4> 
        <span class="blue">Plugin </span>Credentials</h4> 
       <ul class="addpage-form2"> 
        <li> 
         <label class="addpage-label"> 
          User Name :</label><input name="txtUserName" id="txtUserName" type="text" class="addpage-input2" /> 
        </li> 
        <li> 
         <label class="addpage-label"> 
          Password :</label><input name="txtPassword" id="txtPassword" type="password" class="addpage-input2" /> 
        </li> 
       </ul> 
       <div class="clear"> 
       </div> 
      </div> 
      <!--BASIC INFO panel End--> 
      <div class="clear"> 
      </div> 
     </div> 
</body> 
</html> 

अपना समय के लिए अग्रिम धन्यवाद: और भी यहाँ मेरी एचटीएमएल कोड है।

+1

आप क्या करना चाहते हैं? अद्यतन घटना पर या? – Sudarshan

+0

इसे प्रत्येक आईफ्रेम के लिए ट्रिगर नहीं किया जा सकता है, 'chrome.tabs.onUpdated' टैब के लिए पृष्ठ नहीं है। तो यह प्रत्येक टैब के लिए केवल एक बार होता है। – ocanal

+0

जब कोई नया टैब खोला जाता है, तो अद्यतित श्रोता पूर्ण रूप से दो बार स्थिति बदलता है। स्थिति अगर (changeInfo.status == 'पूर्ण') पृष्ठ के आधार पर दो या अधिक निष्पादित की जाएगी। उदाहरण के लिए, जब मैं Google होम पेज खोलता हूं, तो उसे दो बार पूर्ण स्थिति मिल जाएगी। मेरा सवाल यह है कि पूरी स्थिति को एक बार से अधिक बार बदलने या केवल एक बार स्थिति में स्क्रिप्ट निष्पादित करना बंद करना है। –

उत्तर

7

यह क्रोम Issue 162543 में ज्ञात बग था जिसे 2012-12-05 को तय किया गया था।

वर्कअराउंड:

"background": { 
    "scripts": ["js/eventPage.js"], 
    "persistent": true 
    }, 

को (अब कोई आवश्यकता नहीं)

Make Event Page to Background Page बदलते कोड द्वारा

से और विकास के लिए पृष्ठभूमि पृष्ठों का उपयोग कर जब तक ठीक है द्वारा आगे बढ़ने पहुंचा दिया।

अन्य अंक:

के बाद अपने manifest.json पर एक नज़र क्यों

"background": { 
    "scripts": ["js/eventPage.js"], 
    "persistent": false 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["js/eventPage.js"] 
    } 
    ], 

js/eventPage.js सामग्री स्क्रिप्ट के साथ ही पृष्ठभूमि \ घटना स्क्रिप्ट किया जाता है करता है, बीत रहा है chrome.tabs.onUpdated.addListener() के लिए कोड बिल्कुल content scripts में काम नहीं करेगा, इस कोड

आप अधिक जानकारी की जरूरत है, तो मुझे बताएं को खत्म करें।

+0

से उठाएंगे, आपके समर्थन और मूल्यवान टिप्पणियों के लिए बहुत बहुत धन्यवाद। मैंने 'समाधान ए' लागू किया, यह ठीक काम कर रहा है और सामग्री स्क्रिप्ट में addlistener() का उपयोग करने की मेरी गलती को इंगित करने के लिए भी धन्यवाद। –

+0

यह ओएस एक्स पर 28.0.1500.71 को फिर से टूटा हुआ प्रतीत होता है, बस सावधान रहें। –

+0

मैं दो "पूर्ण" प्रकार की घटनाओं को भी देख रहा हूं, लेकिन वे थोड़ा अलग हैं। दूसरा तर्क, changeInfo, पहली घटना के लिए "पूर्ण" है, और दूसरे के लिए अपरिभाषित है। मैंने अपने अवलोकनों को https://code.google.com/p/chromium/issues/detail?id=162543 पर रखा है – kzahel

संबंधित मुद्दे