【问题标题】:Include local html fragments within local html main container在本地 html 主容器中包含本地 html 片段
【发布时间】:2017-02-28 01:52:36
【问题描述】:

背景

我想停止使用Latex 为我的应用程序创建文档和自动报告,我更愿意使用html+css,我以后可能会使用wkhtml2pdf 转换为pdf,以便添加封面页、表格内容、页眉、页脚,全部在 A4 分隔页中。

wkhtml2pdf 是轻量级 exe,支持用于高级文档预处理/格式化的脚本/css。所以,到目前为止,一切都很好,看来html+css 是我替换Latex 的最佳选择......

问题

为了便于维护,而不是将所有文档内容放在一个文件中,我最初考虑将我的本地文件组织成这样:

doc/index.html

docs/includes/introduction.html
docs/includes/part1.html
docs/includes/part2.html

docs/resources/mystyle.css
docs/resources/jquery-3.1.1.min.js

并编写主要文档index.html如下:

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="mystyle.css">
    <script src="./resources/jquery-3.1.1.min.js"></script>

    <script>
      // When document is ready, feed divs with real content
      $(document).ready(function() 
      {     
        $('#Introduction').load('./resources/introduction.html');
        $('#Part1').load('./resources/part1.html');
        $('#Part2').load('./resources/part2.html');         
      });       
    </script>
  </head>

  <body>
    <div id="Introduction"></div>
    <div id="Part1"></div>
    <div id="Part2"></div>  
  </body>
</html>  

不幸的是,我收到了XMLHttpRequest 错误,基本上告诉它无法加载文件,因为cross-origin 仅支持 http、data、chrome、https 等...协议 (?? 即使我所有的文件都是本地的,main.html 也是从本地文件系统启动的——所以都是同源——??)

我尝试了许多解决方法(link rel=importw3IncludeHTML、使用iframe 并尝试阅读内容)它们都属于cross-origin 问题。

问题

是否有一种easy/light 解决方案来合并local main.html 文件中的所有local html 片段(即没有外部grep或额外的工具,只是基本的 html+javascript)?

NB1:我知道我可以在 chrome 浏览器中更改标志以允许cross-origin,但我想避免这种情况。首先,出于安全原因。其次,因为在将文件发送到wkhtml2pdf 转换器时我不能这样做。第三,因为不容易按原样提供文档并说“只需单击index.html 在网络浏览器中打开文档”。

NB2:文档片段很可能只是 &lt;section&gt;&lt;p&gt;&lt;img&gt;&lt;table&gt; 元素都合并在 main.html 的主体中,用于在一个地方管理 css 格式和其他内容。

【问题讨论】:

  • 问题解决了吗?为什么不能设置本地 http 服务器?以 node.js 为例,它只需要几行代码。
  • @Supersharp 我还没有找到解决方案,所以我将所有内容放在一个 html 文件中 (stackoverflow.com/q/40497481/684399)。我不会不使用本地 http 服务器的原因是我正在尝试创建自动报告(全部在 html+css+javascript 中),以便可以轻松查看它们并最终从任何客户的网络浏览器(太复杂,无法要求他们安装本地服务器来查看文档/报告)

标签: html include


【解决方案1】:

您可以在 Firefox 中使用 XMLHttpRequest 获取本地文件。

它曾经与 Chrome 一起工作,但自 2010 年以来对本地文件有“安全”限制has been introduced

也许您可以向所有客户建议使用 Firefox...


一种解决方法(对于 Chrome)可能是将资源加载为 &lt;script&gt;,并以多行字符串形式获取内容。

index.html中:

<script src="ressource1.js"></script>
...

ressource1.js 中:

var fragment1 = `
     <section>
         HTML content for part 1 
     </section>`
document.querySelector( '#target1' ).innerHTML = fragment1

资源保存在单独的文件中(以 JavaScript 的形式)并注入到主 HTML 文档中。


也许值得提供一个Electron 应用程序以及您的文档文件,以便在没有网络服务器的情况下浏览它。

实际上它是一个带有 chromuim 浏览器的 node.js Web 服务器。它针对大多数平台,你只需要你的 HTML/JS/CSS 技能。顺便说一下,你也可以在里面集成一个 PDF 库。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-06-08
  • 2011-11-04
  • 2014-08-11
  • 2021-04-17
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多