小编Tom*_*Tom的帖子

使用'preload'链接指令在Chrome中预加载字体

preload指令未按预期在Chrome中执行.下面是一个完整的HTML页面,可以在Chrome中打开以进行结果比较.它应该应用所有5种字体; 相反,它只应用第一个预加载的字体,为应该是第二个字符制作一个虚假斜体,并简单地用默认的衬线代替剩下的3个字体.

此外,在开发人员的控制台中,对于五种字体中的每一种,此消息在大约3秒后出现:

The resource [URL] was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it wasn't preloaded for nothing.

奇怪的是,它确实将第一个字体(Muli)应用于h1h2标签(尽管为它制作了一个虚假的斜体h2); 您可以单击错误消息中的URL,并在开发人员的控制台中显示预加载字体的预览.

有什么问题在这里有什么不妥?(我在Windows 8.1专业版的Chrome 56上测试了这个.)

<!DOCTYPE html>
<html>
<head>
    <title>Preload Font Test</title>
    <link rel="preload" href="https://fonts.gstatic.com/s/muli/v10/zscZFkjVRGyfQ_Pw-5exXPesZW2xOQ-xsNqO47m55DA.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="https://fonts.gstatic.com/s/muli/v10/YxNEAWILjDc466nftZdqXuvvDin1pK8aKteLpeZ5c0A.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="https://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzBampu5_7CjHW5spxoeN3Vs.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="https://fonts.gstatic.com/s/opensans/v13/PRmiXeptR36kaC0GEAetxv79_ZuUxCigM2DespTnFaw.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="https://fonts.gstatic.com/s/lato/v13/tI4j516nok_GrVf4dhunkg.woff2" as="font" type="font/woff2" …
Run Code Online (Sandbox Code Playgroud)

fonts google-chrome hyperlink preload preloading

11
推荐指数
1
解决办法
5526
查看次数

打开Chrome扩展程序时,Service Worker TypeError

当我打开WAVE(Web辅助功能评估工具)扩展程序时,我的服务工作者在Chrome中抛出此错误:

未捕获(承诺)TypeError:sw.js不支持请求方案'chrome-extension':52(匿名)@ sw.js:52 Promise.then(async)(匿名)@ sw.js:50 Promise.then( async)(匿名)@ sw.js:45 Promise.then(async)(匿名)@ sw.js:38

我的服务人员代码是:

(function () {
    'use strict';
    var consoleLog;
    var writeToConsole;
    const CACHE_NAME = '20180307110051';
    const CACHE_FILES = [
        'https://fonts.gstatic.com/s/notosans/v6/9Z3uUWMRR7crzm1TjRicDv79_ZuUxCigM2DespTnFaw.woff2',
        'https://fonts.gstatic.com/s/notosans/v6/ByLA_FLEa-16SpQuTcQn4Igp9Q8gbYrhqGlRav_IXfk.woff2',
        'https://fonts.gstatic.com/s/notosans/v6/LeFlHvsZjXu2c3ZRgBq9nJBw1xU1rKptJj_0jans920.woff2',
        'https://fonts.gstatic.com/s/notosans/v6/PIbvSEyHEdL91QLOQRnZ1xampu5_7CjHW5spxoeN3Vs.woff2',
        'https://fonts.gstatic.com/s/materialicons/v22/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2',
        'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/fonts/fontawesome-webfont.woff2',
        'favicon.20180205072319.ico',
        'favicons/android-chrome-512x512.20180211120531.png',
        'favicons/android-chrome-192x192.20180211120531.png',
        'offline.html'
    ];
// for debugging:
    writeToConsole = false;
    consoleLog = function (message) {
        if (writeToConsole) {
            console.log(message);
        }
    };
// https://stackoverflow.com/questions/37117933/service-workers-not-updating
    self.addEventListener('install', function (e) {
        e.waitUntil(
            Promise.all([caches.open(CACHE_NAME), self.skipWaiting()]).then(function (storage) {
                var static_cache = storage[0];
                return Promise.all([static_cache.addAll(CACHE_FILES)]);
            })
        );
    });
// intercept network requests: …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome google-chrome-extension promise service-worker

6
推荐指数
2
解决办法
3346
查看次数

如何使用 PHP CSP header() 附加/覆盖 .htaccess Content-Security-Policy

我的 .htaccess 文件中有一个 Content-Security-Policy 标头,它适用于包含多个页面的整个网站。每个页面上都有内联元素,我不会(也不能)移动到单独的 .js 文件中,我希望 CSP 也允许它们而不使用“不安全内联”。因此,我想使用动态生成的带有 FALSE 标志的 PHP header() 将它们添加到每个页面的顶部。FALSE 标志(在此处记录)将附加到任何现有的传入标头而不覆盖它。从理论上讲,这应该可以解决我的问题……但事实并非如此。

由于未知原因,我无法在 HTML 内容之前使用 PHP header() 附加或替换 .htaccess 文件中设置的 CSP。下面是演示问题的代码: (1) 页面的 .htaccess 文件;(2) PHP 页面本身。您应该能够轻松重现这一点。(我使用 Chrome 57 进行测试)。

sha256 哈希值用于如下所示的元素;更改其中的一个字符,哈希将不再对其有效。(如果您使用某些浏览器扩展程序,Chrome 可能会抱怨需要额外的哈希值;只需将它们添加到 PHP header();方便地,Chrome 将为您提供每个内联<script>CSP的正确哈希值)

如果您重新删除 .htaccess 文件中的 CSP 指令,则脚本将执行。为了进一步证明它的工作原理,更改散列中的一个字符并在控制台打开的情况下重新加载页面;它应该报告一个错误,指出 CSP 对脚本无效,然后报告应该使用什么散列来验证(这将是原始散列)。

但是,如果您随后取消对 .htaccess 文件中的 CSP 指令的 rem,则 PHP header() 无效,无论是否带有 FALSE 标志。

这就是问题所在:当 .htaccess 文件具有 CSP 标头时,PHP CSP header() 不起作用。

我不想使用 anonce并且我不想在 .htaccess 文件中使用unsafe-inlineunsafe-eval...而且我不想将哈希添加到 …

php apache .htaccess http-headers content-security-policy

5
推荐指数
1
解决办法
4533
查看次数

Edge 中的异步滚动 (APZ) 出现卡顿和问题;不在 IE 或其他浏览器中

当通过滚动侦听器调整某些 div 时,Edge 浏览器会导致某些 div 出现卡顿。这种卡顿现象不会在 IE、Chrome、Opera 或 Firefox 中发生。

\n\n

尽管 Firefox 不会导致卡顿,但当它检测到首次使用滚动侦听器时,它会在控制台中引发一个标志,并将我引导到此页面以进行说明:

\n\n

https://developer.mozilla.org/docs/Mozilla/Performance/ScrollLinkedEffects

\n\n

该文章似乎准确描述了我在 Edge 中遇到的问题:

\n\n
\n

在异步滚动模型中,视觉滚动位置在合成器线程中更新,并且在滚动事件在 DOM 中更新并在主线程上触发之前对用户可见。这意味着实现的效果将稍微落后于用户看到的滚动位置。简而言之,这可能会导致效果迟缓、卡顿或紧张,这是我们想要避免的。

\n
\n\n

它只提供两种解决方案,第一种(位置:粘性)仅具有有限的浏览器支持,第二种(滚动捕捉)已从网络标准中删除。

\n\n

更进一步,我发现了 Edge 开发团队关于 APZ(异步平移和缩放)的一篇好文章:

\n\n

https://blogs.windows.com/msedgedev/2017/03/08/scrolling-on-the-web/#ahrEuFu6fybJ1uwj.97

\n\n

如果有一种方法可以打开和关闭 APZ,那就太理想了,但我找不到解决方法。然而,Firefox 的实现对我的日常工作来说没有任何问题,但 Edge 的实现却存在极大的问题,特别是因为它不提供对position:sticky 的支持。

\n\n

还有其他方法可以解决这个问题吗?这是一个问题。

\n

javascript scroll asynchronous onscrolllistener microsoft-edge

5
推荐指数
1
解决办法
773
查看次数

如何使用 Babel-Standalone 在客户端 React JSX 中执行导入/导出

我正在使用 Babel-Standalone 在 React 应用程序中使用 JSX,而不使用 NPM。Babel 显然将“import”语句翻译成“require”语句;导入 'require.js' 和其他依赖项以使这项工作产生更多错误。

当然,必须有一种简单的方法来在客户端 JSX 的上下文中执行导入/导出。请告知(此处不寻求 Node/NPM/Webpack 解决方案;寻求适当库的 CDN 和 import 语句的重写等)。

<!doctype html>
<html lang="en-us">
<head>
    <title>React JSX Babel-Standalone Import/Export Problem</title>
    <meta charset="utf-8">
</head>
<body>
    <div id="root"></div>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

<script type="text/babel">

// See MyExport.js text below this SCRIPT
// Goal: to employ <MyExport /> in the return of App.

// import MyExport from "./MyExport";

const App = () => {
    return (
        <div>Hello</div>
    );
};
ReactDOM.render(<App />, document.querySelector("#root")); …
Run Code Online (Sandbox Code Playgroud)

javascript export jsx reactjs babeljs

5
推荐指数
3
解决办法
4921
查看次数

当 Babel 动态附加时,动态附加的 JSX 不会被 Babel Standalone 转译

当 Babel Standalone 作为 SCRIPT 标签的 SRC 属性提供时,Babel Standalone 可用于动态附加的 JSX 代码。当使用 JavaScript 将其附加到 DOM 时,它不起作用。对于 React 库来说情况并非如此,当动态附加 React 库时,它可以与动态附加的 JSX 一起正常工作。

首先,这是 JSX 文件 (react.jsx):

class HelloMessage extends React.Component {
  render() {
    return <h1>Hello</h1>;
  }
}
ReactDOM.render(<HelloMessage/>, document.getElementById('app'));
Run Code Online (Sandbox Code Playgroud)

接下来,这是使用它的 HTML。请注意,React 库和 JSX 文件是动态添加的;这工作正常。但是,Babel Standalone 仅在将 Babel Standalone 添加为 SCRIPT 元素的 SRC 时才转译 JSX,而不是在使用附加 JS/JSX 其余部分的相同 JavaScript 进行附加时转译。通过重新删除一个 Babel Standalone 调用并取消重新删除另一个来在两种状态之间切换。我想动态附加 Babel Standalone...有什么问题吗?

<!doctype html>
<html>
<head>
    <title>Inscrutable Babel Problem</title>
</head>
<body>
    <div>
        <p>Babel works only when added as a …
Run Code Online (Sandbox Code Playgroud)

javascript jsx reactjs babeljs react-dom

2
推荐指数
1
解决办法
1130
查看次数

辅助功能:如何为一个 INPUT 项目正确使用多个 LABEL 元素(通过 ARIA 等)?

我有一个两侧的移动菜单抽屉,它依赖一个隐藏的复选框在两侧之间切换/切换。

有两个 LABEL 元素,菜单抽屉的每一侧一个。每个 LABEL 通过其 FOR 属性引用隐藏 INPUT 复选框的 ID。因此,单击显示的 LABEL 会检查 INPUT 复选框并导致菜单切换侧(通过 CSS)。HTML的提炼是:

<ul class=main-menu>
    <li>
        <input id=toggle-drawer type=checkbox title="hidden checkbox">
        <label for=toggle-drawer>See Sub Menu</label>
        <ul class=sub-menu>
            <li>
                <label for=toggle-drawer>See Main Menu</label>
            </li>
            <li>Sub-menu item 1</li>
            <li>Sub-menu item 2</li>
            <li>Sub-menu item 3</li>
        </ul>
    </li>
    <li>Main Menu item 1</li>
    <li>Main Menu item 2</li>
    <li>Main Menu item 3</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

事实上,具有多个引用同一输入项的标签是完全有效的 HTML。

https://www.w3.org/TR/html401/interact/forms.html#h-17.9.1

“通过 for 属性创建多个引用,可以将多个 LABEL 与同一个控件相关联。”

但是,WebAIM WAVE(Web 可访问性评估工具)浏览器扩展将这两个标签标记为错误,说明:

“一个表单控件最多应该有一个关联的标签元素。如果多个标签元素与控件关联,辅助技术可能无法读取适当的标签。”

作为补救措施,它继续说明:

“如果需要多个表单标签,请使用 aria-labelledby。”

aria-labelledby 似乎不适用于我的情况,因为它会被放在一个 DIV …

html label accessibility input wai-aria

2
推荐指数
1
解决办法
1049
查看次数