2016-07-27 217 views
0

我正在嘗試從Angular2 Typescript Chrome擴展程序中獲取當前顯示的網址。 我已閱讀this以獲得url,並且this有關如何在Ts中調用Js函數。 我也在我的tsconfig.json中將allowJs設置爲true。在Typescript中獲取Chrome的當前域名

這裏是我的代碼:

ngOnInit(){ 
    declare var tabs = chrome.tabs.query({params...},function(tabs) { 
     return tabs[0]; 
    }); 
    console.log(tabs()); 
    } 

這並不編譯,除非我刪除日誌。

我也試過不使用function expression call

declare chrome.tabs.query({'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT}, 
     function(tabs){} 
    ); 

但它並沒有在所有的工作。 我想知道它是否可以是異步相關的,因爲代碼是在OnInit中。

任何想法?

謝謝!

+0

爲什麼你使用'declare'?我很確定這不是你想要的。聲明一個變量意味着「這個名稱和類型有一個變量,但是它是在別的地方定義的,所以不用擔心編譯器。」但在你的例子中,你正在賦值。 –

+0

那麼,其中一個鏈接建議在調用Ts中的Js函數時這麼做。 – Stanislasdrg

+2

有沒有真正的「從ts調用js」作爲打字稿是javascript的東西。問題在於編譯器不會識別'chrome.tabs.query',因爲它沒有爲它定義,所以你可以聲明它或者使用定義文件來爲你定義它。但是當你將這樣一個函數的結果分配給一個變量時,該變量不應該被聲明,而應該實際存在。 –

回答

1

感謝Nitzan的評論解決了這個問題。這裏是代碼:

declare private getUrl(){ 
    chrome.tabs.query({}, function(tabs) { 
     console.log(tabs[0]); 
    }); 
    } 

ngOnInit(){ 
    this.getUrl(); 
}