SharePoint Framework 在web部件中使用第三方样式 - 从外部URL引用第三方样式

简介:

博客地址:http://blog.csdn.net/FoxDave
本篇讲述如何在web部件中从外部URL引用第三方样式库。
在SPFx项目中引用第三方库的另一种方式就是从URL引用它们,如CDN或私有管理路径。这种方式最大的好处是我们将从公共位置加载常用的库,有可能客户端的用户已经将该库下载到了本地电脑中。这种情况下SPFx将会重用缓存中的库,使你的web部件加载得更快。
即便你不能使用公共CDN来加载库,从提高性能的角度看也是一次很好的实践。指向URL可以使用户只下载一次脚本,之后在整个网站进行缓存重用,显著提升了加载页面的速度和用户体验。
在从公共URL加载第三方库时,要注意使用上的风险。因为承载它们的地址不是由你进行管理的,所以不能确保它们的内容绝对安全。SPFx加载的脚本在当前用户的上下文运行,具有当前用户的权限。并且,如果承载脚本的地址不能访问了,你的web部件就无法工作了。
安装库的类型
当你从URL引用第三方库时,你不需要将他们以包的形式在你的项目中进行安装。但是如果你想要在开发过程中进行类型安全检查,你需要安装它们的TypeScript类型。
假设你创建了一个空项目,用命令npm install @types/jquery --save(注意是两个短横线)安装TypeScript的jQuery类型。
指定库的URL
从一个URL加载第三方库,你需要在项目的配置文件中指定该库URL的地址。打开文件./config/config.json,在externals部分添加jQuery相关的代码,添加完的代码所示:

{
  //...
  "externals": {
    //...
    "jquery": "https://code.jquery.com/jquery-3.1.1.min.js",
    "jquery-ui": "https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
    //...
  }
  //...
}

在web部件中从URL引用库
在SPFx项目中指定了加载jQuery和jQuery UI的URL后,下一步是在项目中进行引用,打开文件./src/webparts/jQueryAccordion/JQueryAccordionWebPart.ts,在文件的顶部import声明的下面,添加如下代码:

import * as $ from 'jquery';
require('jquery-ui');

在打包时,它们会被标记为外部资源,因此不会包含在包中。运行命令gulp serve来启动项目。在弹出的工作台页面中,添加web部件到画板中,打开浏览器的debug tool并转到network标签页,刷新页面。我们可以看到jQuery加载的地址:
1

细心的你会发现,上图的折叠样式没有显示出来,从请求查看器中我们可以看到只加载了jQuery UI的脚本,但是并没有加载CSS样式。
在web部件中引用第三方CSS样式表
前面提到的config.json文件只支持添加外部的脚本文件,从外部引用样式文件跟它不同,我们需要使用SPComponentLoader。
使用SPComponentLoader从URL加载样式
打开文件./src/webparts/jQueryAccordion/JQueryAccordionWebPart.ts,在顶部import声明的下面,添加如下代码:

import { SPComponentLoader } from '@microsoft/sp-loader';

然后重写onInit()方法:

export default class JQueryAccordionWebPart extends BaseClientSideWebPart<IJQueryAccordionWebPartProps> {
  protected onInit(): Promise<void> {
    SPComponentLoader.loadCss('https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.min.css');
    return super.onInit();
  }

  // ...
}

在web部件在页面实例化之后,它会从指定的URL加载jQuery UI的CSS。
再次查看页面,可以看到样式出来了。
2

分析web部件包的内容
在编译完项目之后,在浏览器中打开文件./temp/stats/js-thirdpartycss.stats.html,可以看到包明显小了很多,变成了7KB(之前是300KB),并且jQuery和jQuery UI并不在图表中显示了,因为它们是在web部件运行时加载了。

相关文章
|
11月前
|
前端开发 JavaScript Java
Web.xml - Servlet与Filter的url-pattern
Web.xml - Servlet与Filter的url-pattern
90 8
|
3月前
|
数据安全/隐私保护 开发者 Ruby
【深度揭秘】Rails高手都不说的秘密:玩转URL映射,让你的Web应用瞬间高大上!
【8月更文挑战第31天】Rails中的路由机制负责将HTTP请求映射到应用内部逻辑。本文通过问答形式,结合示例代码详细解释了路由的作用、定义及使用方法。在`config/routes.rb`中定义的`resources :articles`会自动生成CRUD操作所需的标准RESTful路由。此外,还介绍了如何自定义非标准路由以及命名路由的生成与使用,帮助开发者更灵活地管理URL与应用逻辑间的映射关系,提升Rails应用的健壮性和可维护性。
32 0
|
24天前
|
监控 安全 Apache
构建安全的URL重定向策略:确保从Web到App平滑过渡的最佳实践
【10月更文挑战第2天】URL重定向是Web开发中常见的操作,它允许服务器根据请求的URL将用户重定向到另一个URL。然而,如果重定向过程没有得到妥善处理,可能会导致安全漏洞,如开放重定向攻击。因此,确保重定向过程的安全性至关重要。
29 0
|
2月前
|
安全 PHP 开发者
Web安全-URL跳转与钓鱼
Web安全-URL跳转与钓鱼
43 8
|
3月前
|
API 开发者 Python
"FastAPI路由大揭秘!轻松玩转URL映射,让你的Web应用路由设计既RESTful又灵活多变,秒杀传统框架的秘籍在这里!"
【8月更文挑战第31天】在Web开发中,路由是连接用户请求与后端逻辑的关键。FastAPI作为现代Python Web框架的佼佼者,以其简洁的API设计和高性能,提供了高度灵活的路由系统。本文通过开发一个博客系统的案例,详细介绍了FastAPI中路由的实现方法,包括基础路由定义、参数类型验证及路由分组与嵌套等,展示了如何轻松构建RESTful风格的URL映射,提升应用的可维护性和扩展性。
68 2
|
3月前
|
前端开发 Python 容器
Python+Dash快速web应用开发:静态部件篇(下)
Python+Dash快速web应用开发:静态部件篇(下)
|
3月前
|
JavaScript 安全
SharePoint Online 部署SPFx Web部件
【8月更文挑战第10天】在SharePoint Online中部署SPFx Web部件需先安装Node.js及Yeoman等工具,通过Yo生成器创建项目。开发Web部件后,使用`gulp`命令构建、打包并生成.sppkg文件。接着,在SharePoint管理中心的应用程序目录上传并部署该解决方案包至目标网站。最后,通过编辑页面插入Web部件进行测试,确保遵循最佳实践并维护更新。
|
3月前
|
开发者 Java UED
大文件传输不再头疼:揭秘Struts 2如何轻松应对文件上传与下载难题!
【8月更文挑战第31天】在Web应用开发中,文件上传与下载至关重要。Struts 2作为主流Java EE框架,凭借Commons FileUpload及文件上传拦截器简化了相关操作。本文探讨Struts 2在文件传输上的优势,通过具体配置与代码示例,展示如何设置最大文件大小、使用`fileUpload`拦截器以及实现文件上传与下载功能。对于大文件传输,Struts 2不仅能够轻松应对,还支持上传进度显示,有效提升了用户体验。总体而言,Struts 2为文件传输提供了高效便捷的解决方案,助力开发者构建稳定可靠的Web应用。然而,在处理大文件时需兼顾网络带宽与服务器性能,确保传输顺畅。
57 0
|
4月前
|
开发框架 搜索推荐 前端开发
【.NET全栈】ASP.NET开发Web应用——Web部件技术
【.NET全栈】ASP.NET开发Web应用——Web部件技术
|
4月前
|
API 网络架构 C++
SharePoint Online SPFx Web部件绑定数据
【7月更文挑战第6天】在Markdown格式下,以下是关于创建SharePoint Online SPFx Web部件绑定数据步骤的摘要: 1. 创建数据列表。 2. 使用VS Code打开Web部件。 3. 定义列表模型(如`IList`和`IListItem`接口)。 4. 引入`spHttpClient`以执行REST API请求。 5. 实现`_getListData()`方法,调用REST服务获取列表数据。 6. 设计`_renderList()`方法来渲染数据。 7. 在`render()`方法中获取并渲染数据到Web部件。