You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

由Blob生成的iframe页面如何引用父页面路径下的资源?

问题:Blob生成的页面如何加载宿主页面相对路径的资源

我通过以下代码从宿主页面生成iframe内容:

parent.App.Plugins.GetInstance(obj).Compile(obj.content).then((html) => {
    var blob = new Blob([html],{type:"text/html"});
    var url = URL.createObjectURL(blob);
    window.location.href = url;
});

但生成的HTML里,外部链接(比如https://开头的)能正常加载,服务器本地的相对路径资源(比如js/main.js、/images/some-file.jpg)却无法加载。想问这种情况下,该用什么相对URL才能加载宿主页面路径下的内容?

示例HTML内容:

<html>
<head>
  <script src="https://unpkg.com/jquery/dist/jquery.min.js"></script>
  <script src="./modules/loader.js" type="module"></script>
  <script src="js/main.js"></script>
</head>
<body>
  <img src="https://images.unsplash.com/photo-1472740378865-80aab8e73251">
  <img src="/images/some-file.jpg">
</body>
</html>

原因

URL.createObjectURL(blob)生成的是blob:协议的URL,它的基准路径和宿主页面完全无关,所以HTML里的相对路径会基于这个blob:URL解析,自然找不到宿主服务器上的资源。

解决方案

1. 给资源加上宿主页面的绝对路径

直接把相对路径拼接上宿主的域名(或完整根路径),比如宿主页面是https://example.com/app/,那js/main.js改成https://example.com/app/js/main.js,/images/some-file.jpg改成https://example.com/images/some-file.jpg。

你可以在生成HTML时,通过window.location.origin或window.location.href动态获取宿主的基础路径,批量替换资源路径。

2. 在Blob的HTML中添加<base>标签

在HTML的<head>里插入<base>标签,指定宿主页面的基础URL,这样所有相对路径都会自动基于这个URL解析,不用逐个修改资源链接。

比如修改后的HTML:

<html>
<head>
  <base href="https://example.com/app/"> <!-- 替换成你的宿主页面基础路径 -->
  <script src="https://unpkg.com/jquery/dist/jquery.min.js"></script>
  <script src="./modules/loader.js" type="module"></script>
  <script src="js/main.js"></script>
</head>
<body>
  <img src="https://images.unsplash.com/photo-1472740378865-80aab8e73251">
  <img src="/images/some-file.jpg">
</body>
</html>

也可以在JS代码里动态插入这个标签:

parent.App.Plugins.GetInstance(obj).Compile(obj.content).then((html) => {
    // 获取宿主页面的基础路径,这里根据实际情况调整
    const hostBaseUrl = window.location.origin + '/app/';
    // 在head开头插入base标签
    const modifiedHtml = html.replace('<head>', `<head><base href="${hostBaseUrl}">`);
    var blob = new Blob([modifiedHtml],{type:"text/html"});
    var url = URL.createObjectURL(blob);
    window.location.href = url;
});

内容的提问来源于stack exchange,提问作者frumbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:07:41