2013-07-15 66 views
2

我在使用JQuery在我的上下文腳本中有一個令人費解的問題。我試圖在Facebook上運行一些JavaScript,並且一直收到這個錯誤「Uncaught TypeError:Object [object Object] has no method'text'」。Chrome擴展,JQuery錯誤「未捕獲TypeError:對象[對象對象]沒有方法'文本'」

在我的manifest.json我的上下文腳本聲明如下:

"content_scripts": [ 
    { 
    "matches": ["https://*.facebook.com/*"], 
    "js": ["jquery.js", "misc.js", "facebook.js"], 
    "all_frames": true, 
    "run_at": "document_end" 
    }, 
    //.... there are other pages that are get injected with contexts scrips here as well that aren't having this same issue. 
] 

我使用jQuery V1.7.1,misc.js有this function就象這樣:

function findString(search, element) { 
    element = (typeof element === "undefined") ? "td" : element; 
    var x = $(element).filter(function() { 
     return new RegExp('^\\s*' + search + '\\s*$').test($(this).text()); 
    }); 
    return x; 
} 

從一個我以前的問題,和facebook.js有兩個不同的編碼嘗試,第一個只是普通的JQuery:

var name = $("a._8_2"); //I did check, and on all my friend's profiles the class "_8_2" appears to be unique every time. 
if (name.length){ 
    var nmTxt = name.text(); 
    name.text("chupacabra"); 
} 

這是企圖針對Facebook的個人資料頁,其結構像這樣的名字:

<div class="_6-e"> 
    <h2 class="_6-f"> 
    <a class="_8_2" href="https://www.facebook.com/profileurlhere">FirstName LastName</a> 
    </h2> 
</div> 

這沒有工作,我var name = $("div._6-3");了我提到的錯誤累發現它具有相同的結果。 我又試圖什麼,我認爲將是一個非常混亂的解決方法:

var name = findString(document.title, "a"); //this method is defined in misc.js, see link above 
if (name.length){ 
    var nmTxt = name.text(); 
    name.text("chupacabra"); 
} 

這仍然沒有奏效。我在var nmTxt = name.text();上得到了同樣的錯誤,我無法弄清楚爲什麼,特別是因爲我在其他頁面上注入了非常類似於此腳本的腳本(在這個非常相同的擴展中),並且這些腳本正如預期的那樣工作。

在此先感謝大家!

+0

你確定'findString'返回一個JQuery對象嗎?你可能只需要像'$(name).text()'一樣包裝它。 – McGarnagle

+0

是的,我確實相當確定。它在我的其他語境中沒有問題。這就是爲什麼我更困惑= Z這裏是[我的舊問題中的功能鏈接](http://stackoverflow.com/questions/16779394/jquery-find-text-and-change-single-cell-價值),但爲了清晰起見,我將它包含在這個問題中。 –

+0

如果你做'jQuery(「a._8_2」)'',結果相同嗎? –

回答

4

name在您的全球範圍內,所以它實際上與window.name相沖突。 window.name默默地它的值轉換爲字符串,這就是你的錯誤是來自:

> window.name = $('<a>') 
> window.name 
"[object Object]" 
> window.fooname = $('<a>') 
> window.fooname 
[<a>​</a>​] 

因此,要解決這個問題,無論是在一個匿名函數,以防止泄漏到全球範圍內的東西包住代碼:

(function() { 
    ... 
})(); 

或者使用不同的變量名稱。我會使用自動執行的匿名函數。

+0

啊,沒錯。我記得名爲'name'的變量的其他問題。 +1 –

+1

輝煌。我無法相信我自己並沒有意識到(我很愚蠢)。你是我的人稱之爲「完全老闆」的人。 –

相關問題