在 Safari Mac/Iphone 中单击浏览器后退按钮时 Next.js 页面崩溃

问题描述 投票:0回答:2

在某些版本的 IOS 中,上下文对象未定义,在网络选项卡中检查时,浏览器磁盘缓存中缓存的 .json 文件在单击后退按钮时会抛出“403”错误。

附件是网络选项卡的快照。在 Chrome 浏览器中完美运行。

这是实时网站 https://www.directv.com/forbusiness/,可以在美国境外访问,没有地理围栏。

上下文未定义,即 ctx && ctx.req.cache,页面之一的片段

customerServiceIndex.getInitialProps = async (ctx) => {
  const page: string =
    ctx && ctx.query && ctx.query.page.length > 0
      ? ctx.query.page
      : `customer-support`;
  const path: string = `/dtvcms/dtvb/prod/customerservice.model.dtv.json`;
  let pages = ctx?.query?.page;
  let reqQueryParams: any;
  if (ctx.req) {
    reqQueryParams = ctx?.req?.query;
  } else {
    reqQueryParams = queryStringToObject(window.location.search);
  }
  let pagesInfoData = await fetchPageData(ctx, ctx.query.page, page, path);
  let cmsFeed = pagesInfoData?.cmsFeed;
  let feed = pagesInfoData?.feed;
  let fragments: any = feed && feed?.data ? feed.data : {};
  const contentProvider: ContentProvider = new ContentProvider();
  const data = contentProvider.buildDataFromLayout(
    // data1,
    fragments,
    page,
    pages,
    null,
    reqQueryParams,
    ctx.asPath
  );
  const initialProps = {
    data,
    err: cmsFeed == "" ? { statusCode: 404 } : undefined,
    feed: fragments?.pageProperties?.elements?.analyticsPageLoad?.analytics,
    cmsFeed: cmsFeed,
    page,
    pagePath: ctx.asPath,
    seo: fragments?.pageProperties?.elements || undefined,
    root: publicRuntimeConfig.root,
  };
  return initialProps;
};

---- 提取呼叫 ------

export const fetchPageData = async (
  ctx,
  page: string,
  currentPage,
  path: String
) => {
  console.log("currentPAge", currentPage);
  let authorization: string = ``;
  let cmsSource: string = ``;
  let contentSource: string = ``;
  page = ctx.query && ctx.query.page ? ctx.query.page : currentPage;
  let cmsVersion: string = ``;
  let pages: { [key: string]: { [key: string]: string } };
  let ctxuserAgent: string;
  let reqQueryParams: any;
  let is404page: boolean;
  let dbData: any;
  let feed: any = {};
  if (ctx?.req) {
    if (ctx?.query) {
      authorization = ctx?.query?.authorization || authorization;
      cmsSource = ctx?.query?.contentSourceBu6dot5;
      contentSource = ctx?.query?.contentSource || contentSource;
      pages = ctx?.query?.pages || {};
    }
    cmsVersion = ctx?.req?.query ? ctx?.req?.query.cmsversion : cmsVersion;
    ctxuserAgent =
      ctx?.req?.headers["idpctx-user-agent"] || ctx?.req?.headers["user-agent"];
    is404page = ctx?.query && ctx?.query?.is404Page === true;
    delete ctx.query.depVersion;
    delete ctx.query.authorization;
    delete ctx.query.pages;
    reqQueryParams = ctx?.req?.query;
  } else {
    dbData = (await dbGet(page)) as {
      [key: string]: { [key: string]: string };
    };
    if (typeof window !== undefined) {
      cmsSource = `${window.location.protocol}//${window.location.host}`;
    }
    reqQueryParams = queryStringToObject(window?.location?.search);
  }
  console.log(`DBDB`, dbData);
  console.log(`pages`, pages);
  const cmsFeed: string =
    pages &&
    pages[page] &&
    pages[page].cmsFeed &&
    pages[page].cmsFeed.length > 0
      ? pages[page].cmsFeed
      : dbData && dbData.cmsFeed && dbData.cmsFeed.length > 0
      ? dbData.cmsFeed
      : path;
  let cacheData: any =
    ctx && ctx?.req && ctx?.req?.cache ? ctx?.req?.cache : {};
  feed = await handleResponse(cacheData);
  if (cmsSource === "") {
    if (process?.env?.GN_6DOT5_CMS_HOST) {
      cmsSource = `${process?.env?.GN_6DOT5_CMS_HOST}`
      console.log("@@@@ ")
    } else {    
    cmsSource =
      publicRuntimeConfig && publicRuntimeConfig.prod === false
        ? `https://tst3.directv.com`
        : `https://www.directv.com`;
    }
  }
  const url = `${cmsSource}${cmsFeed}`;
  if (!Object.values(feed).some((v) => v)) {
    console.log("cms cache failed going to call api");
    feed = await failoverCmsCall(url, page);
  }
  return {
    feed,
    pages,
    cmsFeed,
  };
};

reactjs next.js safari akamai
2个回答
0
投票

我认为这与

的权限有关

https://www.directtv.com/dtvcms/etc

您没有必要的授权来查看或获取该页面的数据。如果您拥有该域名,请确保您以正确的授权进行响应。


0
投票

我也遇到了同样的问题。 请告诉我,你解决这个问题了吗?

© www.soinside.com 2019 - 2024. All rights reserved.