簡體   English   中英

Chrome擴展程序:為什么不起作用?

[英]Chrome Extension: Why Isn't It Working?

我試圖獲取chrome中選項卡的當前URL,然后向站點發起請求並獲取內容並將其寫入文檔主體。 這是我的chrome ext。 JS:

var engine = {

    run: function () {
        chrome.tabs.query({
            'active': true,
            'windowId': chrome.windows.WINDOW_ID_CURRENT
        }, function (tabs) {
            var url = tabs[0].url;
            var urlfinal = 'http://SOMESITEHERE.com/api.php?url=' + url;
            var response = this.connect(urlfinal);
            document.write(response);
        });
    },



    //console.log(this.url),

    connect: function (link) {
        var xmlHttp = null;
        xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", link, false);
        xmlHttp.send(null);
        return xmlHttp.responseText;
    }

};

document.addEventListener('DOMContentLoaded', function () {
    engine.run();
});

但這會拋出:響應tabs.query時出錯:TypeError:未定義不是函數... bla bla

我做錯了什么? 最好的方法是什么?

編輯:

這是My Manifest.json:

{
  "manifest_version": 2,

  "name": "SOMETHINGHERE",
  "description": "SOMETHINGHERE",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "http://SITEHERE.com/",
    "tabs"
  ]
}

“ TypeError:未定義不是函數”表示您正在嘗試調用具有undefined值的東西,就好像它是一個函數一樣。

在你的情況,你叫this.connect(urlfinal)但是this是不是你希望它是(不是engine )。

位於回調內部,而不再是run函數 ,並且this沒有屬性connect 因此, this.connect == undefined 在這種情況下,調用this.connect()會引發該錯誤。

為了解決這個問題,例如,您可以存儲this對象的頂層,並讓閉包處理其余的對象:

run: function () {
    var _this = this;
    chrome.tabs.query({
        'active': true,
        'windowId': chrome.windows.WINDOW_ID_CURRENT
    }, function (tabs) {
        var url = tabs[0].url;
        var urlfinal = 'http://SOMESITEHERE.com/api.php?url=' + url;
        var response = _this.connect(urlfinal);
        document.write(response);
    });
}

此處查看有關此技術的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM