2012-01-09 60 views
0

我試圖在使用Personalized-Web(Chrome擴展)的內容腳本中運行JavaScript命令。我是新來的JavaScript & jQuery的,但我發現,進入這個代碼:JavaScript中的瀏覽器欄與內容腳本 - '死'不起作用

javascript:jQuery("div.photo-container").die(); 

到我的瀏覽器地址欄中某個特定頁面上達到了預期的結果:它撤消在頁面的一個執行.live通話JavaScript的。

但是,如果我在內容腳本中包含相同的代碼或$("div.photo-container").die();,則不起作用。我也嘗試包括頁背景下,這個腳本標籤:

<script type="text/javascript"> 
    $("div.photo-container").die(); 
</script> 

和鉻聲稱$jQuery沒有定義。然而,就我所知,該頁面自己的javascripts並不是include或者任何時候引用jQuery源代碼。

那麼,瀏覽器欄,內容腳本和頁內的<script>標籤有什麼區別?我如何使用「自動」方法之一(即不將其粘貼到瀏覽器欄中)?

+0

爲了讓第一個例子工作,jQuery必須已經加載了。你確定頁面上沒有其他腳本,甚至沒有''的末尾? – PPvG 2012-01-09 22:31:02

+0

@PPvG - 在整個頁面中有很多腳本。我想我應該通過他們尋找是否/在哪裏加載jQuery? – keflavich 2012-01-10 00:33:26

+0

不,對不起,我讀過你的第一行。查看[Mohammed的回答](http://stackoverflow.com/a/8796140/990877)並閱讀[Chrome的內容腳本](http://code.google.com/chrome/extensions/content_scripts.html)的文檔。 。 – PPvG 2012-01-10 07:01:51

回答

2

如果您將該腳本標記插入到頁面中,它應該可以工作。例如:

// Runs in the context of the webpage. 
var injectScript = function() { 
    $("div.photo-container").die(); 
} 

// Runs in the context of the content script. We basically just append the DOM 
// with the injected script and execute it so it will run. 
var script = document.createElement('script'); 
script.appendChild(document.createTextNode('(' + injectScript + ')();')); 
document.body.appendChild(script); 

以上應該假設您的頁面已經定義了$。如果$不存在,這意味着jQuery尚未加載。確保您的清單也定義了document_end

... 
"content_scripts": [ 
    { 
    "matches": ["http://www.rim.com/*"], 
    "js": ["content_script.js"], 
    "run_at": "document_end" 
    } 
], 
... 

如果不工作,那麼有時取決於在網站上,這是好事,延遲加載或智能負載,直到內容(腳本)被加載,因爲的webdesigner異步加載腳本或內容。在這種情況下,做一些研究,看看如何加載jquery。例如,使用setTimeout或DOM事件來計算何時需要運行注射。我在困難的網站上做了很多次,例如Google+擴展。

+0

謝謝。您的解決方案正是我一直在尋找的。但是,我現在得到以下錯誤:未捕獲的類型錯誤:無法調用方法'死'空'。它的工作原理('live'功能'儘可能死'),但仍然有這個錯誤。沒什麼大不了的,我只是想確保我不會破壞任何東西。 – keflavich 2012-01-10 00:32:33

+0

我不知道'die()'是在這方面,試着'console.log($('div.photo-container'))'看看它是否打印出來 – 2012-01-11 21:52:05

相關問題