跳到内容
新问题

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

单击“注册GitHub”,表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

脚本模块:添加数据服务器->客户端数据传递 #6433

对话

西雷尔
复制链接
成员

@西雷尔 西雷尔 评论2024年4月23日

请参见https://make.wordpress.org/core/2024/05/06/proposal-server-to-client-data-sharing-for-script-modules/

包括#6452
要求WordPress/gutenberg#60952(本请购单建立并注册@wordpress/api-回迁模块)。

Trac票:


此Pull请求仅用于代码审查。请将所有其他讨论保留在Trac记录单中。不要合并此Pull请求。请参见GitHub拉取代码审查请求有关更多详细信息,请参阅《核心手册》。

复制链接

github-操作 机器人程序 评论2024年4月23日

使用WordPress Playground进行测试

可以使用WordPress游戏场实例。

WordPress游戏场是一个完全在浏览器中创建完整WordPress实例的实验项目。

需要注意的一些事项

  • 无法在Playground中访问插件和主题目录。
  • 关闭带有Playground实例的选项卡时,所有更改都将丢失。
  • 刷新页面时,所有更改都将丢失。
  • 每次单击下面的链接时,都会创建一个新的实例。
  • 每次更新此拉请求时,都会创建一个包含所有更改的新ZIP文件。如果改变没有反映在游乐场实例中,
    最新的构建可能失败或尚未完成。检查要确保的工作流运行列表.

有关这些限制的更多详细信息,请查看限制页面在WordPress Playground文档中。

用WordPress Playground测试这个拉请求.

@西雷尔 西雷尔 用力推动的这个 添加/脚本-模块-数据传递 分支 d0f1c02 529b670号 比较 2024年4月23日14:05
$config=应用过滤器(“scriptmoduledata_”.$module_id,array());
if(!空($config)){
wp_print_inline_script_tag(打印行脚本标记)(
wp_json_encode($config,json_HEX_TAG|json_EX_AMP),
复制链接

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

任何不包括在内的原因JSON_UNESCAPED_SLASHES格式这里也是吗?我怀疑端点的URL将是相对常见的数据,并避免倾斜牙签综合征那就太好了。JSON_HEX_TAG格式应足以避免出现问题</script>添加斜杠的默认转义是为了避免。

JSON_UNESCAPED_UNICODE(JSON_UNESCAPED_UNICODE)是另一个需要考虑的问题,但如果页面使用非UTF-8编码,则需要测试是否会中断。

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我根本没有考虑到这一点,它是从Interactivity API实现相同功能的方式复制而来的:

wp_print_inline_script_tag(打印行脚本标记)(
wp_json编码(
$交互数据,
JSON_HEX_TAG格式|JSON_HEX_AMP格式
),
阵列(
'类型'=>'应用程序/json',
'身份证件'=>'wp-交互数据',
)
);

我做了一些测试,看起来我们应该能够添加JSON_UNESCAPED_SLASHES格式在这两个地方,谢谢!

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

JSON_UNESCAPED_UNICODE(JSON_UNESCAPED_UNICODE)也可以添加,但正如您所提到的,它可能需要支持UTF-8检查:

$opts=JSON_HEX_TAG|JSON_EX_AMP | JSON_UNESCAPED_SLASHES;if(get_bloginfo('blog_charset')==='UTF-8'){$opts |=JSON_UNESCAPED_UNICODE;}

看起来它肯定会提高可读性和潜在的大小:

<?php(电话)
$opts选项=0;$t吨='🏴󠁧󠁢󠁥󠁮󠁧󠁿';变量转储($t吨,斯特伦($t吨),json编码($t吨,$opts选项),斯特伦(json编码($t吨,$选择)),json编码($t吨,$opts选项|JSON_UNESCAPED_UNICODE(JSON_UNESCAPED_UNICODE)),斯特伦(json编码($t吨,$opts选项|JSON_UNESCAPED_UNICODE(JSON_UNESCAPED_UNICODE))),);
字符串(28)“🏴󠁧󠁢󠁥󠁮󠁧󠁿"整数(28)字符串(86)“\ud83c\udff4\udb40\udc67\udb40 \udc62\udb40.udc65\udb40%udc6e\udb40\ udc67\ udb40\0dc7f”整数(86)字符串(30)“”🏴󠁧󠁢󠁥󠁮󠁧󠁿""整数(30)

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我将在此处跟进互动API:#6520

复制链接

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

在一些快速实验中,我发现Firefox 125和Chromium 124都需要将文档设置为utf-8才能正确解释未转义的Unicode。

而且他们似乎使用了实际的内容类型HTTP标头覆盖<元>标记,如果两者都指定了不同的字符集,但它们将使用<元>标记(如果HTTP标头未指定字符集)。已弃用字符集属性<脚本>标签似乎也没有被使用。

复制链接
成员

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

至关重要的是JSON_UNESCAPED_SLASHES格式不添加,因为它在编码包含以下内容的字符串时避免了安全漏洞</script>。当斜杠被转义时,这将变成<\/script>并且浏览器不会过早关闭脚本标记。

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

谢谢你提醒我!我想继续讨论#6520(评论),我已经回复了。PR很可能会更快落地,无论在那里使用什么实现,都应该在这里使用。(事实上,我希望Interactivity API使用此建议打印其数据。)

复制链接

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

@威斯顿鲁特我已经解决了这个问题

JSON_HEX_TAG格式应足以避免出现问题</script>添加斜杠的默认转义是为了避免。

有任何理由认为这不准确吗?

复制链接
成员

@威斯顿鲁特 威斯顿鲁特 2024年5月9日

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

啊,是的。只要JSON_HEX_TAG格式是存在的,那么包含它似乎是安全的JSON_UNESCAPED_SLASHES(JSON_UNESCAPED_SLASHES)对不起,我错过了。也许可以添加一条注释,解释为什么使用特定的标志集,并注意到安全隐患。

奔腾推送提交引用的这个拉请求 2024年5月15日
Interactivity API已使用键入“application/json”,使其不作为脚本执行,但可用到一。数据通过“wp_json_encode()”运行,并使用一些标志进行编码以确保对潜在危险的字符进行转义。然而,这可能会带来一些挑战。不必要时急于逃跑在读取输出HTML时会使数据难以理解。例如,所有非ASCII Unicode字符都使用其等效代码点进行转义。这将导致`\ud83c\ud70`而不是`🅰`.在这个补丁中,JSON编码的标志被细化以确保必要同时放宽其他规则(如果博客字符集为UTF-8)。这使得交互API数据作为人类阅读器更快破译和诊断。总之:-此数据采用JSON编码,并打印在`<script type=“application/JSON”>`标记中。-如果我们确保从不在数据中打印“<”,则不可能断开脚本标记,浏览器将所有内容视为元素的“textContent”。-此时,所有其他转义都变得不必要,包括unicode转义如果页面使用UTF-8字符集(与JSON相同的编码)。请参见#6433(审查)开发于#6520在中讨论https://core.trac.wordpress.org/ticket/61170修复:#61170后续行动:[57563]。道具:比约什、德姆斯内尔、琼斯罗、萨伯恩哈特、韦斯顿鲁特。git-svn-id:https://develop.svn.wordpress.org/trunk@58159602fd350-edb4-49c9-b593-d223f7449a82
马克贾奎斯推送提交到markjaquith/WordPress引用的这个拉请求 2024年5月15日
Interactivity API已使用键入“application/json”,使其不作为脚本执行,但可用到一。数据通过“wp_json_encode()”运行,并使用一些标志进行编码以确保对潜在危险的字符进行转义。然而,这可能会带来一些挑战。不必要时急于逃跑在读取输出HTML时,可能会使数据难以理解。例如,所有非ASCII Unicode字符都使用其等效代码点进行转义。结果是“\ud83c\udd70”,而不是`🅰`.在这个补丁中,JSON编码的标志被细化以确保必要同时放宽其他规则(如果博客字符集UTF-8)。这使得交互API数据作为人类阅读器更快破译和诊断。总之:-此数据采用JSON编码,并打印在`<script type=“application/JSON”>`标记中。-如果我们确保从不在数据中打印“<”,则不可能断开脚本标记,浏览器将所有内容视为元素的“textContent”。-此时,所有其他转义都变得不必要,包括unicode转义如果页面使用UTF-8字符集(与JSON相同的编码)。请参见WordPress/WordPress-develop#6433(评论)开发于WordPress/WordPress-develop#6520在中讨论https://core.trac.wordpress.org/ticket/61170修复:#61170后续行动:[57563]。道具:比约什、德姆斯内尔、琼斯罗、萨伯恩哈特、韦斯顿鲁特。构建自https://develop.svn.wordpress.org/trunk@58159git-svn-id:http://core.svn.wordpress.org/trunk@576221a063a9b-81f0-0310-95a4-ce76da25c4cd
github-操作 机器人程序推送提交到平台/文字印刷性能引用的这个拉请求 2024年5月15日
Interactivity API已使用键入“application/json”,使其不作为脚本执行,但可用到一。数据通过“wp_json_encode()”运行,并使用一些标志进行编码以确保对潜在危险的字符进行转义。然而,这可能会带来一些挑战。不必要时急于逃跑在读取输出HTML时,可能会使数据难以理解。例如,所有非ASCII Unicode字符都使用其等效代码点进行转义。结果是“\ud83c\udd70”,而不是`🅰`.在这个补丁中,JSON编码的标志被细化以确保必要同时放宽其他规则(如果博客字符集UTF-8)。这使得交互API数据可以像人类阅读器一样更快破译和诊断。总之:-此数据采用JSON编码,并打印在`<script type=“application/JSON”>`标记中。-如果我们确保从不在数据中打印“<”,则不可能断开脚本标记,浏览器将所有内容视为元素的“textContent”。-此时,所有其他转义都变得不必要,包括unicode转义如果页面使用UTF-8字符集(与JSON相同的编码)。请参见WordPress/WordPress-develop#6433(评论)开发于WordPress/WordPress-develop#6520在中讨论https://core.trac.wordpress.org/ticket/61170修复:#61170后续行动:[57563]。道具:比约什、德姆斯内尔、琼斯罗、萨伯恩哈特、韦斯顿鲁特。构建自https://develop.svn.wordpress.org/trunk@58159git-svn-id:https://core.svn.wordpress.org/trunk@576221a063a9b-81f0-0310-95a4-ce76da25c4cd
@西雷尔
复制链接
成员 作者

此概念证明被以下内容取代#6682.

@西雷尔 西雷尔关闭了这个2024年6月13日
@西雷尔 西雷尔删除了 添加/脚本模块数据传递 分支 2024年6月13日14:40
免费注册 在GitHub上加入此对话.已经有帐户了吗?登录以发表评论
标签
还没有
项目
还没有
开发

成功合并此请求可能会解决这些问题。

3名参与者