2013-11-03 17 views
0

我將amazon link localizer轉換爲Chrome擴展。 我目前正在處理的錯誤是:未捕獲的ReferenceError和意外的令牌錯誤

Uncaught ReferenceError: checkAmazonLinks is not defined

被張貼這JSON的網址是:https://freegeoip.net/json/?callback=checkAmazonLinks 我打電話在我的JS文件爲這樣:

function findLocation() { 
if (typeof google != "undefined" && google.loader.ClientLocation != null) { 
    var strCountry = google.loader.ClientLocation.address.country_code; 
    checkAmazonLinks(strCountry) 
    console.log(strCountry) 
} else { 
    objScript = document.createElement("script"); 
    objScript.src = "https://freegeoip.net/json/?callback=checkAmazonLinks"; 
    document.getElementsByTagName("head")[0].appendChild(objScript); 
} 

這裏是我的清單.js文件:

{ 
"name"    : "amazon linker", 
"version"   : "0.1", 
"manifest_version" : 2, 
"description"  : "A simple extension that turns all Amazon links on a page into localized affiliate links", 
"permissions"  : [ "http://*/*","https://*/*"], 
"browser_action": { 
    "default_title": "Amazon Linker" 
}, 
"content_security_policy": "script-src 'self' https://google.com; https://freegeoip.net; object-src 'self'", 

"content_scripts": [{ 
     "matches": ["<all_urls>"], 
     "js": ["amazon-localiser.js"] 
    } 
], 
"web_accessible_resources": ["amazon-localiser.js","amazon-localiser.php"] 
} 

我試圖消除從freegeoip的JSON請求回調,但後來我得到一個錯誤說

Uncaught SyntaxError: Unexpected token :

有一個在我的.js函數調用checkAmazonLinks(),這是findLocation()加載後,我試圖重新排列順序,但這並沒有幫助。在findLocation()之前,在.js中定義checkAmazonLinks()的想法是通過具有相同函數名稱的回調來檢索JSON。我如何克服這個錯誤?

+1

findLocation函數在哪裏運行(背景頁面,內容腳本,彈出窗口)? – gkalpak

+0

它在內容腳本中,amazon-localiser.js –

回答

0

內容腳本在isolated world(沙箱環境)中運行。您已在內容腳本的上下文中定義了checkAmazonLinks函數,但https://freegeoip.net/json/?callback=checkAmazonLinks在網頁的JS上下文中注入並執行(因爲內容腳本和Web頁面共享DOM)。
問題是,在網頁的上下文中,沒有定義checkAmazonLinks函數。

解決方案:

A.)
注入checkAmazonLinks功能到網頁爲好,使請求https://freegeoip.net/...之前。例如: -

... 
} else { 
    objScript1 = document.createElement("script"); 
    objScript1.innerHTML = "function checkAmazonLinks(...) {...}"; 
    document.getElementsByTagName("head")[0].appendChild(objScript1); 

    objScript = document.createElement("script"); 
    objScript.src = "https://freegeoip.net/json/?callback=checkAmazonLinks"; 
    document.getElementsByTagName("head")[0].appendChild(objScript); 
} 

B.)
製作(和工藝)的內容腳本的上下文的請求。例如。對https://freegeoip.net/json進行AJAX調用並將響應傳遞給checkAmazonLinks函數。

+0

我一直在嘗試A,沒有運氣。我得到一個未捕獲的SyntaxError:意外的令牌ILLEGAL chrome-extension://infofeofeimlchhlggjgcccdpnpabgbk/amazon-localiser.js:118錯誤,這裏是第118行:objScript1.innerHTML ='function checkAmazonLinks(strCountry){... –

+0

如果我不(至少)看到整個「第118行」,你希望我猜猜可能是什麼問題? :) – gkalpak

+0

那是整行118. –

相關問題