Skip to content

Commit ddfbabe

Browse files
Publish Archive V3 and HTTP Server V2 documentation
1 parent cf8629e commit ddfbabe

14 files changed

Lines changed: 958 additions & 149 deletions

File tree

docs/docs/pages/appui-cookbook-webview-share-export/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ <h2 id="完整示例"><a class="heading-anchor" href="#完整示例">#</a>完整
419419
appui.run(body, state=state, presentation=&quot;sheet&quot;)</code></pre>
420420
</figure>
421421
<h2 id="关键技巧"><a class="heading-anchor" href="#关键技巧">#</a>关键技巧</h2>
422-
<ul><li><code>WebView(url=...)</code> 打开网页;<code>WebView(html=...)</code> 渲染本地 HTML 字符串。</li><li>HTML 放在普通 <code>State</code> 字段,不要把 <code>WebView</code> 实例放进状态。</li><li>MiniApp 内导出/分享优先 <code>ShareLink(item=..., subject=..., message=...)</code>;设置类界面仍用原生 <code>Form</code>/<code>List</code></li><li>用户输入进入 HTML 前要用 <code>html.escape</code>,避免把正文当作原始 HTML 执行。</li></ul>
422+
<ul><li><code>WebView(url=...)</code> 打开网页;<code>WebView(html=...)</code> 渲染本地 HTML 字符串。</li><li>HTML 放在普通 <code>State</code> 字段,不要把 <code>WebView</code> 实例放进状态。</li><li>MiniApp 内导出/分享优先 <code>ShareLink(item=..., subject=..., message=...)</code>;设置类界面仍用原生 <code>Form</code>/<code>List</code></li><li>用户输入进入 HTML 前要用 <code>html.escape</code>,避免把正文当作原始 HTML 执行。</li><li>若预览来自工作区静态站点,使用 <code>http_server.start(port=0, url_mode=&quot;browser&quot;)</code> 的会话 origin;不要公开 token、不要泛开 localhost,也不要把默认 universal URL 的令牌 path 用根相对链接覆盖。</li></ul>
423423
</div>
424424

425425
</article>

docs/docs/pages/appui-guide-media/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,10 @@ <h2 id="webview-url-或-html"><a class="heading-anchor" href="#webview-url-或-h
534534

535535
appui.run(body, state=state, presentation=&quot;sheet&quot;)</code></pre>
536536
</figure>
537-
<p>远程页面示例:<code>appui.WebView(url=&quot;https://www.apple.com&quot;).frame(height=360)</code>。声明了 <code>miniapp.json</code> capabilities 的 MiniApp 还需要 <code>network</code> 与匹配的 <code>allowedNetworkHosts</code>;控件自己的 <code>allowed_hosts</code> 只能进一步缩小范围,且会作用于导航、子资源、WSS 和 Cookie/网站数据操作。</p>
537+
<p>远程页面示例:<code>appui.WebView(url=&quot;https://www.apple.com&quot;).frame(height=360)</code>。声明了 <code>miniapp.json</code> capabilities 的 MiniApp 还需要 <code>network</code> 与匹配的 <code>allowedNetworkHosts</code>;控件自己的 <code>allowed_hosts</code> 只能进一步缩小范围。两者都限制为最多 128 条、UTF-8 总计最多 32768 字节,超限或含非法规则时安全拒绝。运行时会再次按 MiniApp 的不可变权限清单核验页面声明,页面节点不能自行扩权;同一有效集合用于导航、HTTPS/WSS 子资源、Cookie 和网站数据,其他分层网络 scheme 默认阻断。权限快速变化时,每个 WebView 只保留一个正在编译和一个最新待编译策略,全局编译队列也有界。</p>
538+
<p>若页面来自当前 MiniApp 的原生 <code>http_server</code>,使用 <code>http_server.start(port=0, url_mode=&quot;browser&quot;)</code> 返回的地址。宿主只对当前运行的精确随机 localhost origin 开临时授权,因而根相对 CSS/JS/图片可以正常加载;无需也不应把动态 hostname 写入 <code>allowedNetworkHosts</code>。server 停止、替换或 MiniApp 会话结束后,该授权和连接同时失效。默认 <code>url_mode=&quot;universal&quot;</code> 更适合 URLSession/普通客户端,但其令牌位于 path 中,不适合作为含 <code>/style.css</code> 的网页根。</p>
539+
<p>本地内容可以传绝对路径或 <code>file://</code> URL。声明式 MiniApp 读取自身工作区时需要 <code>file_system</code>;系统分享或外部启动交付给当前运行的 <code>LaunchItem.path</code> 属于 host-issued 临时只读授权,不需要额外声明 <code>file_system</code>,但不能写入、不能跨运行保存授权,也不能借此访问工作区或授权根以外的路径。<code>WebView(url=本地文件)</code> 会先规范化、确认文件真实存在且位于当前运行的可读根,再由原生 <code>loadFileURL</code> 限制读取范围。内联 HTML 可用 <code>WebView(html=..., base_url=本地目录或文件)</code> 加载同一授权根内的 CSS、JS 与图片,授权根目录本身也可作为 <code>base_url</code>。只有创建时已进入本地模式的 WebView 才能用 <code>load_url</code> 切换本地文件,且目标仍须位于同一原生范围;远程页面不会继承文件权限,本地页面的主 frame(包括 <code>target=_blank</code> 被折叠到当前视图的导航)也不能跳到远程页面。若页面依赖根相对 URL、ES module、fetch 或前端路由,仍推荐上面的 <code>http_server</code> browser URL,以获得完整 HTTP origin 语义。</p>
540+
<p>WebView 的权限固定归属创建它的 AppUI 运行会话。Tab/页面重建和合法 generation 切换不会误撤权;MiniApp 停止、宿主任务取消或会话结束时,页面会停止并清空,下载与回调资源一并取消,旧 WebView 不会借下一次运行恢复。</p>
538541
<p>需要下载时同时提供 <code>allows_downloads=True</code> 和命名的 <code>on_download(path)</code> 回调,并声明 <code>file_system</code>。返回路径是当前运行会话拥有的临时文件:UI 重建不会令它失效,MiniApp 停止后会自动删除。Cookie 与网站数据命令为 <code>get_cookies</code><code>set_cookie</code><code>delete_cookie</code><code>clear_website_data</code>;每条命令都必须有新的稳定 <code>id</code></p>
539542
<hr>
540543
<h2 id="mapview-地图与标注"><a class="heading-anchor" href="#mapview-地图与标注">#</a>MapView:地图与标注</h2>

docs/docs/pages/appui-ref-media/index.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -526,8 +526,10 @@ <h3 id="webview-v2"><a class="heading-anchor" href="#webview-v2">#</a>WebView V2
526526
</figure>
527527
<p>可用 op:<code>reload</code><code>stop</code><code>go_back</code><code>go_forward</code><code>evaluate_javascript</code><code>load_url</code><code>load_html</code><code>get_cookies</code><code>set_cookie</code><code>delete_cookie</code><code>clear_website_data</code>。Cookie 命令和网站数据清理需要 <code>network</code>;声明式安全 profile 只会读取、修改或清除 allowlist 内域名的数据,不会暴露或删除其他 MiniApp 的站点数据。<code>clear_website_data</code><code>data_types</code> 可选 <code>cookies</code><code>disk_cache</code><code>memory_cache</code><code>local_storage</code><code>session_storage</code><code>indexed_db</code><code>service_workers</code>;省略表示全部。</p>
528528
<p>下载必须同时传 <code>allows_downloads=True</code><code>on_download(path)</code>,并声明 <code>file_system</code>。下载由 WebKit 原生下载任务执行;完成后的临时文件跨 UI 重建可用,并在所属 MiniApp 运行会话结束时清理。失败或策略拒绝由 <code>on_download_error(error)</code> 接收。</p>
529-
<p>系统 JavaScript alert / confirm / prompt 会使用原生对话框;视图销毁时会停止加载、取消未完成下载,并移除 message handler、观察者和 delegate。</p>
530-
<p><code>allowed_hosts</code> 只能缩小 <code>miniapp.json</code><code>allowedNetworkHosts</code> 的范围,不能扩大。声明式安全 profile 只允许 HTTPS/WSS;策略同时覆盖主导航、图片/脚本等子资源和 WebSocket,网页消息只接受主 frame。旧 MiniApp 保持 legacy profile 以兼容已有代码。</p>
529+
<p>系统 JavaScript alert / confirm / prompt 会使用原生对话框。WebView 的原生权限 lease 固定归属创建它的 AppUI 会话;普通 generation 切换会继承同一 lease,但 MiniApp 停止、宿主运行取消或会话撤销后,页面会立即停止并清空,下载会取消,同时移除 message handler、content rule、观察者和 delegate。旧页面不能从下一次运行重新取得权限。</p>
530+
<p><code>allowed_hosts</code> 只能缩小 <code>miniapp.json</code><code>allowedNetworkHosts</code> 的范围,不能扩大;两者都限制为最多 128 条、UTF-8 总计最多 32768 字节。运行时会重新规范化页面声明,并与当前会话不可变的权限清单求交;超限、非法或越权规则会安全拒绝。权限快速切换时每个 WebView 只保留一个正在编译和一个最新待编译策略,全局 WebKit 编译队列同样有界。声明式安全 profile 的普通远程 origin 只允许 HTTPS/WSS,FTP、FTPS 和自定义分层网络 scheme 也会在 WebKit 子资源层阻断。当前会话通过 <code>http_server.start()</code> 创建的精确 universal token path,以及 <code>url_mode=&quot;browser&quot;</code> 创建的精确 localhost origin,是受生命周期约束的本地例外,无需加入 host allowlist。停止 server 或结束会话后两种授权立即撤销。</p>
531+
<p>本地内容可以写成绝对路径或 <code>file://</code> URL。声明式 MiniApp 访问自身工作区需要 <code>file_system</code>;当前运行由系统分享或外部启动交付的 <code>LaunchItem.path</code> 及其 host-issued 临时只读根是例外,无需 <code>file_system</code>,但不能写入、跨会话复用或访问其他路径。Python 层会先解析为当前 MiniApp 可读根内、真实存在且非符号链接逃逸的规范 URL;<code>WebView(url=本地文件)</code> 由原生 <code>loadFileURL(..., allowingReadAccessTo=授权根)</code> 加载。内联页面也支持 <code>WebView(html=..., base_url=本地文件、目录或授权根本身)</code>,供同一授权根内的 CSS、JS、图片使用。只有创建时声明了本地 <code>url</code> 或本地 <code>base_url</code> 的节点,才可用 <code>load_url</code> 在该原生范围内切换本地文件;普通远程/无本地 base 的 WebView 不会因此取得 <code>file://</code> 权限。本地模式的主 frame(包括折叠到当前 WebView 的新窗口导航)不能跳到远程页面,网页消息仍只接受主 frame。</p>
532+
<p>包含根相对链接、ES module、fetch、路由或完整静态站点时,推荐 <code>http_server.start(url_mode=&quot;browser&quot;)</code>:它提供正常 HTTP origin 语义,同时仍由当前会话的随机 token 和原生 lease 精确约束。简单离线文档和相对资源可直接使用本地 <code>url</code> / <code>base_url</code>。旧 MiniApp 保持 legacy profile 以兼容已有代码。</p>
531533
<h3 id="mapview-v2"><a class="heading-anchor" href="#mapview-v2">#</a>MapView V2</h3>
532534
<p><code>region</code> 可传 <code>{&quot;latitude&quot;, &quot;longitude&quot;, &quot;span&quot;, &quot;longitude_span&quot;}</code> 或对应 <code>Binding</code>;用户平移、缩放后由 <code>on_region_change</code> 双向回写。标记推荐提供稳定 <code>id</code>,还可用 <code>subtitle</code><code>system_image</code><code>tint</code></p>
533535
<p><code>overlays</code> 支持:</p>

0 commit comments

Comments
 (0)