2012-03-25 47 views
1

我嘗試在Twitter的.com網頁上發起點擊事件。但是,當我在我的擴展中嘗試代碼時,它不起作用。在twitter chrome擴展中啓動點擊事件

if(typeof TIP == 'undefined'){ 
    var TIP = {}; 
} 


TIP.Tweets = { 
    getNumberOfTweets: function(){ 
     var tweets = $('#stream-items-id .js-stream-item').length; 
     return tweets; 
    }, 
    setNumberOfTweets: function(number){ 
     TIP.Tweets.currentNumberOfTweets = number; 
    } 

} 
TIP.initiate = function(){ 
    TIP.Tweets.currentNumberOfTweet = TIP.Tweets.getNumberOfTweets(); 
    setInterval(function(){ 
     var tweets = TIP.Tweets.getNumberOfTweets(); 

     if(TIP.Tweets.currentNumberOfTweets != tweets){ 
      TIP.Tweets.setNumberOfTweets(tweets); 
      TIP.renderImages(); 
     } 
    }, 100); 

    //Render images 
    TIP.renderImages(); 
} 
TIP.renderImages = function(){ 
    $('#stream-items-id .js-view-details').each(function(){ 
     var btn = this 
     if($.trim($(this).text()) == 'View photo'){ 
      $(btn).click();//This is the button I want to click, which is the view photo button 
      console.log('rendered'); 
     } 
    }); 

} 

$(function(){ 
    TIP.initiate(); 
}); 

但是,當我嘗試手動插入代碼它的作品。我在Google Chrome的控制檯中插入以下代碼:

$('#stream-items-id .js-view-details').each(function(){ 
    var btn = this 
    if($.trim($(this).text()) == 'View photo'){ 
      $(btn).click(); 
      console.log('rendered'); 
    } 
}); 

如果我嘗試做其他事情而不是發起點擊事件。它工作正常。例如,如果我想操縱按鈕的內部html。它在擴展代碼中工作正常。只有當我嘗試在擴展中啓動點擊時,纔會出現此問題。

請求manifest.json檔案:

{ 
    "name": "Twitter Image Previewer", 
    "version": "1.0", 
    "description": "Enables image previews in tweets", 
    "browser_action": { 
     "default_icon": "icon.png" 
    }, 
    "content_scripts": [ 
     { 
      "matches": ["http://twitter.com/*", "https://twitter.com/*"], 
      "css": ["style.css"], 
      "js": ["jquery.min.js", "JeasyCreate.js", "extension.js"], 
      "all_frames": true 
     } 
    ], 
    "permissions": [ 
     "http://*/", 
     "https://*/" 
    ] 
} 
+0

我可以自己回答我的問題。我認爲通過擴展程序啓動點擊事件在Google Chrome中被禁止,因爲安全原因 – einstein 2012-03-25 12:31:49

+0

此代碼是如何執行的?你能顯示'manifest.json'嗎? – 2012-03-25 13:20:05

+0

Rob W檢查上面的manifest.json。我更新了它。 – einstein 2012-03-25 13:22:59

回答

1

我什麼都不知道的jQuery但認爲我應該指出的是,它的工作,作爲一個更純粹的JS的方式....

// https://developer.mozilla.org/en/DOM/element.dispatchEvent 
function simulateClick(obj) { 
    var evt = document.createEvent("MouseEvents"); 
    evt.initMouseEvent("click", true, true, window, 
    0, 0, 0, 0, 0, false, false, false, false, 0, null); 
    var canceled = !obj.dispatchEvent(evt); 
/* 
    if(canceled) { 
    // A handler called preventDefault 
    alert("canceled"); 
    } else { 
    // None of the handlers called preventDefault 
    alert("not canceled"); 
    } 
    */ 
} 

var photos = document.querySelectorAll('#stream-items-id .js-view-details'); 
for (var i = 0; i < photos.length; i++) { 
if (photos[i].firstChild.data.trim()=='View photo') simulateClick(photos[i]); 
} 
+0

感謝它的工作! – einstein 2012-03-25 17:46:36