滑雪板实用程序

Introduction

默认情况下,Snowboard 框架包含几个有助于简化开发的小实用程序。

Cookie

Cookie 实用程序是围绕js-cookie 提供简单、轻量级 JS API 的包,用于与浏览器 cookie 交互。

基本用法

创建一个 cookie,在整个站点有效:

Snowboard.cookie().set('name', 'value')

创建一个从现在起 7 天后过期的 cookie,在整个网站上有效:

Snowboard.cookie().set('name', 'value', { expires: 7 })

创建一个过期cookie,对当前页面的路径有效:

Snowboard.cookie().set('name', 'value', { expires: 7, path: '' })

读取 cookie:

Snowboard.cookie().get('name') // => 'value'
Snowboard.cookie().get('nothing') // => undefined

读取所有可见的 cookie:

Snowboard.cookie().get() // => { name: 'value' }

NOTE: 只有在读取 cookie 的地方有权根据浏览器读取 cookie,才能读取 cookie。

删除 cookie:

Snowboard.cookie().remove('name')

删除一个对当前页面路径有效的cookie:

Snowboard.cookie().set('name', 'value', { path: '' })
Snowboard.cookie().remove('name') // fail!
Snowboard.cookie().remove('name', { path: '' }) // removed!

IMPORTANT! 当删除一个 cookie 而你不依赖于默认属性,您必须传递用于设置 cookie 的完全相同的路径和域属性

Snowboard.cookie().remove('name', { path: '', domain: '.yourdomain.com' })

NOTE: 删除不存在的 cookie 既不会引发任何异常也不会返回任何值。

Encoding

包裹是RFC 6265 合规。 cookie-name 或 cookie-value 中不允许的所有特殊字符都使用每个人的 UTF-8 十六进制等效字符进行编码percent-encoding. cookie-name 或 cookie-value 中唯一允许且仍被编码的字符是百分比% 字符,它被转义以将百分比输入解释为文字。 请注意,默认的编码/解码策略是可以互操作的仅在 js-cookie 读取/写入的 cookie 之间.要覆盖默认的编码/解码策略,您需要使用converter.

NOTE: 根据RFC 6265,如果您的 cookie 太大或同一域中的 cookie 太多,您的 cookie 可能会被删除,更多细节在这里.

饼干属性

可以通过以下方式创建 API 实例来全局设置 Cookie 属性withAttributes(),或单独为每次调用Snowboard.cookie().set(...) 通过传递一个普通对象作为最后一个参数。每次调用属性覆盖默认属性。

NOTE: 您永远不应允许不受信任的输入来设置 cookie 属性,否则您可能会暴露于跨站脚本攻击.

expires

定义何时删除 cookie。值必须是Number 这将被解释为从创建时间开始的天数或Date 实例。如果省略,cookie 将成为会话 cookie。

要创建一个在一天内过期的 cookie,您可以检查维基上的常见问题解答.

Default: 当用户关闭浏览器时,Cookie 将被删除。

Examples:

Snowboard.cookie().set('name', 'value', { expires: 365 })
Snowboard.cookie().get('name') // => 'value'
Snowboard.cookie().remove('name')

path

AString 指示 cookie 可见的路径。

Default: /

Examples:

Snowboard.cookie().set('name', 'value', { path: '' })
Snowboard.cookie().get('name') // => 'value'
Snowboard.cookie().remove('name', { path: '' })

domain

AString 指示 cookie 应该可见的有效域。该 cookie 也将对所有子域可见。

Default: Cookie 仅对创建 Cookie 的页面的域或子域可见

Examples:

假设正在创建一个 cookieexample.com:

Snowboard.cookie().set('name', 'value', { domain: 'subdomain.example.com' })
Snowboard.cookie().get('name') // => undefined (need to read at 'subdomain.example.com')

secure

任何一个true 或者false,指示 cookie 传输是否需要安全协议 (https)。

Default: 无安全协议要求。

Examples:

Snowboard.cookie().set('name', 'value', { secure: true })
Snowboard.cookie().get('name') // => 'value'
Snowboard.cookie().remove('name')

sameSite

AString,允许控制浏览器是否发送 cookie 以及跨站点请求。

默认值:未设置。

NOTE: 更新的浏览器正在使“Lax”成为默认值,即使没有在此处指定任何内容。

Examples:

Snowboard.cookie().set('name', 'value', { sameSite: 'strict' })
Snowboard.cookie().get('name') // => 'value'
Snowboard.cookie().remove('name')

设置默认值

为了设置用于使用创建的每个 cookie 的全局默认值Snowboard.cookie().set('name', 'value') 您可以调用的方法setDefaults(options) Cookie 插件上的方法,它将提供的选项设置为全局默认值。

如果要获取当前默认值,请调用Snowboard.cookie().getDefaults().

Snowboard.cookie().setDefaults({ path: '/', domain: '.example.com' });
Snowboard.cookie().set('example', 'value');

Events

Cookie 插件提供了与 cookie 交互并在访问或创建期间修改其值的能力。

cookie.get

此事件运行期间Snowboard.cookie().get() 并提供(string) name &(string) value 参数,以及一个回调方法,插件可以使用该回调方法以编程方式覆盖 cookie 值。这可用于操纵或解码 cookie 值。

class CookieDecryptor extends Singleton
{
    listens() {
        return {
            'cookie.get': 'decryptCookie',
        };
    }

    decryptCookie(name, value, setValue) {
        if (name === 'secureCookie') {
            setValue(decrypt(value));
        }
    }
}

cookie.set

此事件运行期间Snowboard.cookie().set() 并提供(string) name &(string) value 参数,以及一个回调方法,插件可以使用该回调方法以编程方式覆盖保存到 cookie 的值。这将允许您在将 cookie 值存储到浏览器之前对其进行操作或加密。

class CookieEncryptor extends Singleton
{
    listens() {
        return {
            'cookie.set': 'encryptCookie',
        };
    }

    encryptCookie(name, value, setValue) {
        if (name === 'secureCookie') {
            setValue(encrypt(value));
        }
    }
}

JSON 解析器

JSON Parser 实用程序用于安全地解析不严格符合 JSON 规范的类 JSON(JS 对象字符串)数据。它对于解析中提供的值特别有用data-request-data 所使用的属性数据属性 功能。

这有点类似于JSON5 或者RJSON,但不完全是。关键方面是它允许以字符串形式表示为 JavaScript 对象的数据,就好像它正在积极运行 JS 一样,无需使用eval() 这可能会导致阻止使用的内容安全策略出现问题eval().

NOTE: 尽管此功能已记录在案,但普通开发人员不太可能需要与此功能进行交互。

Usage:

let data = "key: value, otherKey: 'other value';
let object = Snowboard.jsonParser().parse(`{${data}}`);

Sanitizer

Sanitizer 实用程序是一种客户端 HTML 清理程序,主要用于防止自我 XSS 攻击。这种攻击可能看起来像用户从使用剪贴板注入劫持实际存储在剪贴板中的值的网站复制内容,然后让用户将内容粘贴到内容将被视为 HTML 的环境中,通常在 richeditor /所见即所得的领域。

sanitizer 实用程序将删除以开头的所有属性on (通常 JS 事件处理程序作为属性,即onload 或者onerror) 或包含javascript: 它们的值中的伪协议。

它既可以作为全局函数使用(wnSanitize(html)) 并作为滑雪板插件。

以下示例显示了如何连接 Froala 所见即所得编辑器以防止剪贴板注入/自 XSS 攻击。

$froalaEditor.on('froalaEditor.paste.beforeCleanup', function (ev, editor, clipboard_html) {
    return Snowboard.sanitizer().sanitize(clipboard_html);
});

网址处理

Snowboard 包含一些有用的 URL 处理功能,以确保 Snowboard 功能中的 URL 是正确的。这是由Snowboard.url() 插入。

基本 URL 检测

加载 URL 插件时,它会自动检测当前项目的基本 URL,顺序基于三个来源:

您可以通过调用检索基本 URLSnowboard.url().baseUrl() 在你的 JavaScript 中的任何地方。

网址生成

您可以生成一个正确基于通过to URL 插件中的方法。这将确保您在 JavaScript 中使用的任何 URL 都指向正确的 URL。

如果向此帮助程序提供了绝对 URL,它将原封不动地返回:

Snowboard.url().baseUrl();
// returns "https://mysite.com/"

Snowboard.url().to('/');
// returns "https://mysite.com/"

Snowboard.url().to('my-page/my-sub-page');
// returns "https://mysite.com/my-page/my-sub-page"

Snowboard.url().to('https://google.com');
// returns "https://google.com"
豫ICP备18041297号-2