Как получить путь к текущему запущенному скрипту с помощью Javascript?

У нас есть расширение IE, реализованное как вспомогательный объект браузера (BHO). У нас есть служебная функция, написанная на C++, которую мы добавляем к объекту окна страницы, чтобы другие скрипты на странице могли использовать ее для динамической загрузки локальных файлов скриптов. Однако для разрешения относительных путей к этим локальным файлам сценариев нам необходимо определить путь к файлу JavaScript, который вызывает нашу функцию:

  • myfunc(), написанный на C++ и доступный для JavaScript страницы
  • file:///path/to/some/javascript.js
  • (дополнительные кадры стека)

Из верхнего кадра я хочу получить информацию о том, что скрипт, вызывающий myfunc(), находится в файле:///путь/к/некоторым/javascript.js.

Сначала я ожидал, что мы сможем просто использовать интерфейс IActiveScriptDebugдля получения трассировки стека из нашей служебной функции. Однако оказалось невозможным получить интерфейс IActiveScriptиз интерфейса IWebBrowser2или связанного документа (см. Полный стек вызовов для JS с несколькими фреймами в IE8).

Единственное, что я могу придумать, это зарегистрировать нашу собственную реализацию отладчика сценариев и myfunc()взломать отладчик. Однако я скептически отношусь к тому, что это будет работать без запроса пользователя о том, хотят ли они взломать отладчик.

Прежде чем проводить более тщательные тесты этого подхода, я хотел проверить, есть ли у кого-нибудь точная информация о том, будет ли он работать, и/или может ли он предложить альтернативный подход, который позволит функции, написанной на C++, получить трассировку стека из механизм сценариев, который его вызвал.

6
задан Stevoisiak supports Monica 26 September 2017 в 21:17
поделиться