2016-08-01 84 views
2

我正在研究一個框架,我想支持phantomjs。有沒有辦法來檢查頁面JavaScript是否在phantomjs或karma + phantomjs下運行?我只用karma + phantomjs進行測試,但我沒有找到任何可用於檢查環境的全局變量。我認爲會有一個global.phantom變量或類似的東西。這些環境有沒有區別?有沒有辦法檢查我的腳本是否在phantomjs中運行?

+0

[此問題](http://stackoverflow.com/a/244712​​22/13226)和[此問題](http://stackoverflow.com/questions/26186101/how-to-skip-the-code-從phantomjs-or-grover執行)可能會幫助 – ebo

+0

@ebo Nope,但我找到了一個解決方案。 :-) http://laputa.io/blog/2014/10/24/using-karma/ – inf3rno

+0

@ArtjomB。是。 ------------------------ – inf3rno

回答

3

根據這篇文章:http://laputa.io/blog/2014/10/24/using-karma/ Karma運行在iframe中,因此phantomjs變量不存在於此iframe中。所以我們所要做的就是通過業力關閉iframe。要做到這一點,我們必須使用以下設置:

config.set({ 
    client: { 
     useIframe: false 
    } 
}); 

現在,我們可以簡單地使用!!window._phantom!!window.callPhantom檢查幻象是否存在。但這是一個部分解決方案。我仍在尋找更好的,甚至可以在iframe中看到幻影。

我結束了這樣的代碼:

var global = (function() { 
    return this; 
})(); 
var phantom = global._phantom; 
if (!phantom && global.__karma__ && global.frameElement) 
    phantom = global.parent._phantom; 
var isPhantom = !!phantom; 

這是通過雙方的iframe和非噶的iframe,我想它的工作原理是香草phantomjs爲好。

+0

設置'useIframe:false'之前不是'!! window.callPhantom == true'? –

+0

@ ArtjomB。它是'未定義的'。其實這個屬性並不存在,所以它沒有被定義,而不是'undefined'。 :d – inf3rno

相關問題