小编Mar*_*nna的帖子

嵌入的YouTube视频无法在iPad(iOS 7)上播放,而HTML5搜索输入可见

这是我通过蛮力设法解决的错误,但我不明白为什么解决方案有效.

问题是嵌入式YouTube视频在横向视图中没有在iPad(在iOS7中测试)上的特定(响应)网站上工作.我设法将其缩小到特定的CSS规则,当浏览器足够宽时,它会在标题中显示搜索输入,因此它将显示在iPad的横向视图中,但不会显示在纵向视图中.

在稍微蛮力摆弄之后,我发现type="search"从输入标签中删除(导致它回落到默认值type="text")将解决问题.我的所有搜索都没有提出解释为什么这有效,或者甚至是其他任何经历过同样事情的人.

关于bug的更多细节

该网站的工作原理是首先显示图片,点击后可通过JavaScript替换YouTube iframe.在第一次点击之后,它将在桌面浏览器上自动播放,并且在iPad上它将加载视频但在用户再次按下它之前不会播放.

如果type="search"输入是可见的(display: block;),则点击嵌入的视频不会导致它播放; 水龙头没有明显的响应.如果我放大并点击顶部的控件,就像视频的名称一样,我可以看到它们被加下划线,测试显示没有元素覆盖iframe和拦截事件.

奇怪的是,点击iframe右侧的边缘会导致视频开始正​​常播放.否则,将iPad更改为纵向视图(导致通过CSS隐藏搜索输入)将启用iframe以便开始视频播放.在第一次单击之后,无论搜索输入是否显示,所有视频控件都将起作用.

css youtube html5 ipad ios

17
推荐指数
1
解决办法
1823
查看次数

TypeScript 泛型条件类型作为泛型函数的返回值

背景

作为我正在开发的数据分析库的一部分,我正在创建一组从字符串中读取某些类型的值的函数。这个想法本质上是定义 CSV 文件的结构,这样我就可以将其每个单元格作为字符串读取,并且知道它应该是什么类型,然后将该字符串转换为适当类型的值。

有些单元格包含多个值,并被转换为数组。其他单元格包含单个值。

我在这里所做的部分工作是删除与预期不符的值,并记录警告。对于包含数组的单元格,我很高兴结果仍然是一个数组,即使它是空的。但对于包含单个值的单元格,我想将无效值转换为null.

为此,我设置了一个由所有这些“转换器”函数共享的泛型类型,它返回与这些要求匹配的条件类型:

type TransformerFn<T> = (value: string, locationIdentifier?: string) => T extends any[] ? T : (T | null);
Run Code Online (Sandbox Code Playgroud)

在我迄今为止实现的简单情况下,例如将字符串拆分为字符串数组或提取布尔值,这工作得很好。TransformerFn<string[]>TypeScript 在解决or的条件时没​​有问题TransformerFn<boolean>

但我拥有的一个变压器本质上是为了确认列中的每个单元格要么为空,要么包含 string 中的值enum,在这里我遇到了问题。

我一直在输入该字符串枚举,就像Record<string, string>将其用作函数参数时一样,它运行良好。但是,最近我添加了一些功能来重新编码显然应该是特定枚举值但尚未正确加载的数据。

为了实现这一点,我使用了带有约束的泛型类型来表示字符串枚举值的并集:

export function enumValue<E extends string>(enums: Record<string, E>, recodeMap?: Record<string, E>)
Run Code Online (Sandbox Code Playgroud)

这一直工作得很好,直到我尝试添加TransformerFn之前提到的打字。

问题

尽管我的泛型类型E有一个约束 it extends string,这意味着E extends any[]永远不会为真,但 TypeScript 无法解析我的泛型条件类型。

这是它给我的错误:

类型 '(值: 字符串, locationIdentifier?: 字符串 | 未定义) => E | …

typescript typescript-generics conditional-types

7
推荐指数
1
解决办法
6578
查看次数

为 TypeScript、Webpack 和 Jasmine 导入 ES 模块

背景

\n

我有一组使用类似结构在我的个人项目中重复使用的包。

\n

出于生产目的,它们是用TypeScripttsc编写的,并在发布到 npm 之前编译成 JavaScript ,以便我可以将它们安装在我的其他项目中。我还使用Jasmine对它们进行测试

\n

在开发中,我使用Webpack及其ts-loader来编译 TypeScript,这样我就可以在浏览器中运行的示例脚本中使用它。我通常还在我使用这些包的项目中使用 Webpack,尽管它们是在发布之前编译的,这些项目将仅将它们视为 JavaScript 并且不需要使用ts-loader.

\n

我在任何地方都使用ES 模块语法,因此我可以在每个上下文中轻松地使用相同的语法,而不必担心在 Node 的 CommonJS 和浏览器的 ES 模块语法之间切换。为了在 Jasmine 中允许这样做,jasmine.json我在我的配置文件中设置了"jsLoader": "import".

\n

我在如何撰写陈述方面遇到了问题import。特别是,如何以适用于我开发这些包时出现的每个用例的方式指定文件扩展名。

\n
\n

没有文件扩展名

\n

TypeScript 的 Node 模块解析对文件扩展名做出了一些有用的假设:

\n
\n

TypeScript 将模仿 Node.js 运行时解析策略,以便在编译时找到模块的定义文件。为了实现这一点,TypeScript 将 TypeScript 源文件扩展名(.ts、.tsx 和 .d.ts)覆盖在 Node\xe2\x80\x99s 解析逻辑上。

\n
\n

这意味着如果我使用诸如 TypeScript 之类的代码,import { foo } …

jasmine typescript webpack ts-loader

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