fix: объявление в Teams видно и во вкладке-сайте SharePoint
Tests / frontend-test (push) Successful in 1m19s
Tests / frontend-test (push) Successful in 1m19s
Если в Teams закреплена обычная страница SharePoint, SPFx не передаёт веб-части Teams-контекст, и объявление «открывайте в браузере» не показывалось. Теперь Teams определяется ещё по фрейму и User-Agent. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,7 @@ import { confirmDiscardFormChanges, markFormClean, markFormDirty } from '../shar
|
|||||||
import { Drawer } from './Drawer/Drawer';
|
import { Drawer } from './Drawer/Drawer';
|
||||||
import { CategoryTabs } from './CategoryTabs/CategoryTabs';
|
import { CategoryTabs } from './CategoryTabs/CategoryTabs';
|
||||||
import { TeamsBrowserNotice } from './TeamsBrowserNotice/TeamsBrowserNotice';
|
import { TeamsBrowserNotice } from './TeamsBrowserNotice/TeamsBrowserNotice';
|
||||||
|
import { isOpenedInTeams } from '../shared/hostEnvironment';
|
||||||
import { CATEGORIES, DEFAULT_CATEGORY_ID } from '../data/categories';
|
import { CATEGORIES, DEFAULT_CATEGORY_ID } from '../data/categories';
|
||||||
import { REQUEST_TYPES } from '../data/requests';
|
import { REQUEST_TYPES } from '../data/requests';
|
||||||
import SubmitFeature from '../features/submit/SubmitFeature';
|
import SubmitFeature from '../features/submit/SubmitFeature';
|
||||||
@@ -456,7 +457,7 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
|
|||||||
onInput={markFormDirty}
|
onInput={markFormDirty}
|
||||||
onChange={markFormDirty}
|
onChange={markFormDirty}
|
||||||
>
|
>
|
||||||
{hasTeamsContext && <TeamsBrowserNotice />}
|
{isOpenedInTeams(hasTeamsContext) && <TeamsBrowserNotice />}
|
||||||
<div className={styles.tabsWrap}>
|
<div className={styles.tabsWrap}>
|
||||||
<CategoryTabs
|
<CategoryTabs
|
||||||
categories={CATEGORIES}
|
categories={CATEGORIES}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/** Признак настольного/мобильного 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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user