如何通过SW在AMP页面中包含自定义JS?

2024-03-07

我们已经浏览了所有可能的 AMP 博客,但找不到任何在 AMP 中包含自定义 JS 的方法。这个博客(https://www.ampproject.org/docs/guides/pwa-amp/amp-as-pwa#extend-your-amp-pages-via-service-worker https://www.ampproject.org/docs/guides/pwa-amp/amp-as-pwa#extend-your-amp-pages-via-service-worker) 表示我们可以在 Service Worker 的帮助下在 AMP 中添加自定义 JS,但没有描述如何操作。

请让我们知道如何做。

编辑:- 在运行时添加 JS 后,它再次显示相同的旧错误,请查看图像


请注意,在提到的博客文章中,您可以扩展 AMP 页面

一旦从原产地送达

拥有 Service Worker 本身并不能让您免受 AMP 限制。但是,如果您在 AMP 页面中安装了 Service Worker,则您可以开始将 AMP 用作(渐进式)Web 应用程序,限制较少。您可以使用多种模式 -本文 https://www.smashingmagazine.com/2016/12/progressive-web-amps/涵盖主要模式和这个 Google Codelab https://codelabs.developers.google.com/codelabs/amp-pwa-workbox/#0向您展示如何实施它们。

希望有帮助!

EDIT:

是的,好吧,我明白你的意思了。您可以通过将以下代码添加到 Service Worker 来实现此目的:

self.addEventListener('fetch', e => {
  var url = new URL(e.request.url);
  if(url.pathname.split('/').pop().endsWith('amp.html')) {
    e.respondWith(
      fetch(e.request).then(response => {
        var init = {
          status:     200,
          statusText: "OK",
          headers: {'Content-Type': 'text/html'}
        };
        return response.text().then(body => {
          body = body.replace('</body>', '<script src="extra.js" async ></script></body>');
          return new Response(body, init);
        });
      })
    );
  }
});

这将动态添加extra.js文件到所有的*amp.html您的应用程序请求的页面。我相信它仍然会有效,但我还没有测试过。

请注意,这仅在从您的源提供服务时才有效(而不是 AMP 缓存),因为这是您的服务工作人员可以控制的地方。

这个资源 https://www.safaribooksonline.com/library/view/amp-building-accelerated/9781786467317/72b076a8-857f-401f-bca6-0a507473c001.xhtml是我找到代码示例的地方(它有一个软付费专区)。

让我知道它是否有效! :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过SW在AMP页面中包含自定义JS? 的相关文章

随机推荐

  • GAE组织数据结构问题

    好的 我正在与 GAE 合作 我想创建这样的东西 我有类型 组 主题 标签 每个 组 可以有尽可能多的 根据需要 主题 每个 主题 可以有任意多个 标签 如所须 每个 组 可以有任意多个 标签 如所须 它就像一个圆圈 现在我有这样的事情 c
  • QuickDraw 中的 python3 递归动画

    我有一个文本文件 其中包含行星及其相应的卫星 卫星以及它们的轨道半径和周期 我想用它来创建动画quickdraw类似于下面的 文本文件如下 RootObject Sun Object Sun Satellites Mercury Venus
  • 如何通过 Golang 的 json 解组嵌套数组中的对值

    JSON 数据如下 xxx xxx asks 0 00000315 1022 53968253 0 00000328 200 0 00000329 181 70008541 bids 0 00000254 2685 36319716 0 0
  • _PFBatchFaultingArray 对象索引:

    2012 06 15 17 53 25 532 BadgerNew 3090 707 Terminating app due to uncaught exception NSRangeException reason PFBatchFaul
  • 两个不同表中任意一个的参考键[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有以下两个表 employees id name address designation salary phone email bu
  • 使用MVC设计模式时如何加载重型模型

    我正在使用 wxPython 和使用 Tensorflow 创建的深度学习模型构建一个应用程序 我使用的设计模式是MVC 我的问题是深度学习模型非常重 需要很长时间才能加载 大约 2 分钟 同时 GUI 会挂起 我创建了一个描述该过程的示例
  • Typescript 中 `typeof x` 的类型是什么?

    在打字稿中 您可以像这样定义一个类 class Sup static member any static log console log sup 如果您执行以下操作 let x Sup 为什么 x 的类型等于typeof Sup 当我在 v
  • 以管理员身份运行与管理员组运行

    我有一个 C 应用程序 需要允许用户更改计算机名称 这是一项相当特权的操作 仅当用户以管理员身份运行应用程序 Windows 7 右键单击可执行文件 以管理员身份运行 时 我才能使其正常工作 很好 但是用户是管理员 那么为什么他们需要运行A
  • NSAttributedString initWithHTML 字符编码不正确?

    NSMutableAttributedString initWithHTML documentAttributes 似乎破坏了特殊字符 NSString html Hello World notice the smart quotes NS
  • C 三元表达式语句不起作用[重复]

    这个问题在这里已经有答案了 include
  • C# 中的 Xml 比较

    我正在尝试使用 C 代码比较两个 Xml 文件 我想忽略 Xml 语法差异 即前缀名称 为此我正在使用微软的C API 它适用于某些 Xml 但我找不到将其配置为与以下两个 Xml 一起使用的方法 XML A
  • 如何打开一个文件以进行读和写?

    有没有办法打开一个文件进行读取和写入 作为解决方法 我打开文件进行写入 关闭它 然后再次打开它进行读取 但是有没有办法打开文件both读写 以下是如何读取文件 然后写入文件 覆盖任何现有数据 而无需关闭并重新打开 with open fil
  • jQuery的toggleClass回调如何进行?

    我有这个简单的 jQuery 事件toggleClass this on click function this toggleClass fa stop circle 我想调用一些方法 如果fa stop circle被添加 我如何监控此事
  • Docker:从另一台服务器的私有注册表中提取问题

    我刚刚开始学习docker 我有一个在一台服务器 server1 上运行的私有注册表 并且可以通过键入以下内容从 server1 上提取测试映像 docker pull 127 0 0 1 5000 test 但是 当我从另一台服务器键入上
  • libgdx Shaperenderer line ..如何绘制特定宽度的线

    我正在尝试使用 libgdx 形状渲染器绘制一条特定宽度的线 我跟着这个link https stackoverflow com questions 18650619 increasing the width of line drawn u
  • R - 图中线交点的坐标

    的结构data是以下 df1 lt structure list V2 1 10 V1 c 1 4 1 5 1 9 4 5 6 7 7 8 8 1 8 2 8 3 8 9 class data frame row names c NA 10
  • 计算位数 - 哪种方法最有效?

    查找给定数字中的位数有不止一种解决方案 例如 方法一 int findn int num char snum 100 sprintf snum d num return strlen snum 方法2 int findn int num i
  • MIPS 寄存器 $0 可以用来存储和检索值吗?

    当我了解 MIPS 处理器时 我的脑海中牢记着读取 0 寄存器总是返回 0 而写入 0 总是被丢弃 来自 MIPS 程序员手册 2 13 4 1 CPU 通用寄存器 r0 被硬连线到一个值 零 并且可以用作任何指令的目标寄存器 结果是被丢弃
  • Windows 服务中 RuntimeHelpers.PrepareMethod 的缺点[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在调查服务器 具有多个服务 启动后不久发生的延迟问题 我添加了一个简单的方法来加载引用的 DLL 并执行RuntimeHelpers Pre
  • 如何通过SW在AMP页面中包含自定义JS?

    我们已经浏览了所有可能的 AMP 博客 但找不到任何在 AMP 中包含自定义 JS 的方法 这个博客 https www ampproject org docs guides pwa amp amp as pwa extend your a