javascript - 打印 <iframe> 超过一页的内容

标签 javascript iframe media-queries dom-events printing-web-page

在我的 React 应用程序中,我有一个 iframe,它加载了 HTML 文档并且它的内容超过了 1 页。按 Ctrl+p 我想分几页打印,但打印预览只显示一页。

如何识别iframe的内容不止一个A4页面?

chrome devtool 中的 DOM 看起来像

<div class="article-container">
  <iframe style="">#document
   /* hundreds of <p> tags */
  </iframe>
</div>

React App 中的结构是这样的

   <div className="article-container">
      <FrameText content={content} status={!this.state.editStatus} />
   </div>

和框架文本

class FrameText extends React.Component<Props> {
  iframe: HTMLIFrameElement;
  compinentDidMount(){
    window.addEventListener('beforeprint',(e)=>{console.log(e);})
  }
  /* other stuff*/
  render() {
      const { status } = this.props;
      return <iframe ref={(ref) => (this.iframe = ref!)} style={!status ? { display: 'none' } : {}} />;
  }

所以在这里,当按下 ctrl+p 时,我得到了事件并且 iframe 文档在事件中。另外,我在本地状态下也有 iframe 的内容。

我在任何地方都找不到当这个事件被触发时我能用它做什么来操纵或以某种方式告诉打印预览内容很长。

另外,css是

@media print {
  .article-container {
    background-color: white;
    height: 100%;
    width: 100%;
    position: fixed;
    top: 0;
    left: 0;
    margin: 0;
    padding: 15px;
    font-size: 14px;
    line-height: 18px;
  }
}

最佳答案

您的打印媒体查询不适用于 iframe 内部内容,这就是打印时忽略 iframe 大小的原因如果您想将特定的打印样式应用于 iframe,则必须通过适当的方法(无论是 js 还是 html)从外部引用我正在编写一个示例以将样式引用到 iframe 可能存在其他实现

let cssLink = document.createElement("link");
cssLink.href = "style.css"; 
cssLink.rel = "stylesheet"; 
cssLink.type = "text/css"; 
frames['iframe1'].document.head.appendChild(cssLink);

关于javascript - 打印 &lt;iframe&gt; 超过一页的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54912648/

相关文章:

javascript - 为什么我的选择器字段没有直观地更新选项?

javascript - 从 iframe 内部访问父内容(在同一台服务器机器上)jquery 在 firefox 和 IE 中工作但在 chrome 中不工作

html - 我应该在同一域 iframe 中使用 head body 和 title 标签吗?

html - 媒体查询正在运行,但与它们应有的方式相反

html - 响应式设计中的文章和无序列表溢出

javascript - TypeScript - 类型 'id' 上不存在属性 'Node'

javascript - Elasticsearch JS - 变量 [x] 未定义

javascript - 使用 javascript 隐藏 IFRAME 滚动条

CSS 媒体查询不起作用

javascript - 混合内容: Rewrite Javascript to use HTTPS-only