我們有一個IE瀏覽器擴展實現爲瀏覽器幫助對象(BHO)。我們有一個用C++編寫的實用函數,我們將其添加到頁面的窗口對象中,以便頁面中的其他腳本可以使用它來動態加載本地腳本文件。爲了解決這些本地腳本文件的相對路徑,但是,我們需要確定JavaScript文件的調用我們的功能的路徑:如何使用Javascript獲取當前正在運行的腳本的路徑?
myfunc()
用C++編寫,並暴露在頁面的JavaScript- 文件: ///path/to/some/javascript.js
- (額外堆棧幀)
從頂部框架我想腳本調用myfunc()
位於文件中的信息:///路徑/to/some/javascript.js。
我首先希望我們可以簡單地使用IActiveScriptDebug
接口從我們的效用函數中獲取堆棧跟蹤。但是,從接口IWebBrowser2
接口或相關文檔(請參閱Full callstack for multiple frames JS on IE8)似乎不可能獲得接口IActiveScript
。
我能想到的唯一的事情就是註冊我們自己的腳本調試器實現,並讓myfunc()
進入調試器。然而,我懷疑這會在沒有提示用戶是否想要進入調試器的情況下工作。
在對此方法進行更徹底的測試之前,我想檢查是否有人有關於這是否可能工作的明確信息和/或可以建議一種替代方法,以使用C++編寫的函數可以獲取堆棧跟蹤來自調用它的腳本引擎。
我應該已經更清楚了:myfunc()不能從調用者那裏獲得任何可用於確定路徑的信息。 (如果有人很好奇,我們按照CommonJS規範實現require()函數,所以我們必須堅持規範說明的內容。) –
這是完全不同的。你可以做的最好的是看看當前的實現,並可能有一個想法(如果你還沒有)。一個例子就是https://github.com/joyent/smart-platform/blob/master/share/internal_js/require.js – 2012-06-13 06:28:08
上的「智能平臺」需求實現。這有什麼幫助?我們已經爲IE(用C++編寫)實現了require(),但爲了使其能夠按照規範工作,它需要知道調用它的JS文件的路徑。 –