Files
request-portal/src/webparts/requestPortal/shared/hostEnvironment.ts
T
Тимур Городецкий 4c851b4892
Tests / frontend-test (push) Successful in 1m19s
fix: объявление в Teams видно и во вкладке-сайте SharePoint
Если в Teams закреплена обычная страница SharePoint, SPFx не передаёт
веб-части Teams-контекст, и объявление «открывайте в браузере» не
показывалось. Теперь Teams определяется ещё по фрейму и User-Agent.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-02 09:43:20 +05:00

24 lines
1.3 KiB
TypeScript

/** Признак настольного/мобильного Teams в User-Agent (классический и новый клиент). */
const TEAMS_USER_AGENT = /\bTeams\//i;
/** Страница открыта не на верхнем уровне окна, а внутри фрейма (вкладка Teams). */
function isInsideFrame(): boolean {
try {
return window.self !== window.top;
} catch {
// Доступ к window.top из чужого домена бросает исключение — это тоже фрейм.
return true;
}
}
/**
* Открыт ли портал внутри Teams. Teams-контекста SPFx (sdks.microsoftTeams)
* недостаточно: он есть только у приложения/вкладки SPFx. Если в Teams
* закреплена обычная страница SharePoint (вкладка «Сайт»/«SharePoint»), веб-часть
* думает, что она в браузере, — поэтому смотрим ещё на фрейм и User-Agent.
* В браузере страница портала открыта на верхнем уровне и без «Teams/» в UA.
*/
export function isOpenedInTeams(hasTeamsContext: boolean): boolean {
return hasTeamsContext || isInsideFrame() || TEAMS_USER_AGENT.test(navigator.userAgent);
}