У нас есть расширение IE, реализованное как вспомогательный объект браузера (BHO). У нас есть служебная функция, написанная на C++, которую мы добавляем к объекту окна страницы, чтобы другие скрипты на странице могли использовать ее для динамической загрузки локальных файлов скриптов. Однако для разрешения относительных путей к этим локальным файлам сценариев нам необходимо определить путь к файлу JavaScript, который вызывает нашу функцию:
myfunc()
, написанный на C++ и доступный для JavaScript страницыИз верхнего кадра я хочу получить информацию о том, что скрипт, вызывающий myfunc()
, находится в файле:///путь/к/некоторым/javascript.js.
Сначала я ожидал, что мы сможем просто использовать интерфейс IActiveScriptDebug
для получения трассировки стека из нашей служебной функции. Однако оказалось невозможным получить интерфейс IActiveScript
из интерфейса IWebBrowser2
или связанного документа (см. Полный стек вызовов для JS с несколькими фреймами в IE8).
Единственное, что я могу придумать, это зарегистрировать нашу собственную реализацию отладчика сценариев и myfunc()
взломать отладчик. Однако я скептически отношусь к тому, что это будет работать без запроса пользователя о том, хотят ли они взломать отладчик.
Прежде чем проводить более тщательные тесты этого подхода, я хотел проверить, есть ли у кого-нибудь точная информация о том, будет ли он работать, и/или может ли он предложить альтернативный подход, который позволит функции, написанной на C++, получить трассировку стека из механизм сценариев, который его вызвал.