2017-12-04 4 views
1

Reactコンポーネントでiframeのコンテンツを設定しようとしています。私はhandleStatementPrint関数が含まれているコンポーネントを持っています。この関数は、iframeの読み込みが完了したときに呼び出さなければなりません。この関数は、URL if this.props.pdfs.urlでアクセスされた読み込まれたiframeコンテンツ - pdfファイルを出力する必要があります。すでにiframeコンテンツが読み込まれていて、iframeのpdfファイルを見ることができますが、iframeコンテンツをrefで渡す必要がありますが、正しく行う方法はわかりません。私はcomponentDidMountを使用する必要があることを知っていますが、ここに書き込むことはわかりません。iframeをrefで処理する

import React, { Component } from 'react' 

import IframeComponent from './components/Iframe'; 

class MainComponent extends Component { 

    handleStatementPrint =() => { 
    const iframePdf = this.iframePdf.contentWindow; 
    if (this.iframePdf !== undefined) { 
     const iframePdf = this.iframePdf.contentWindow; 
     iframePdf.print(); 
    } 
    } 

    render() { 
    return (
     <div className="container"> 

     { 
      this.props.pdfs && 
      <iframe 
       ref={(frame) => { this.iframePdf = frame }} 
       src={this.props.pdfs.url} 
       title="iFramePdf" 
       type="application/pdf" 
       > 
      </iframe> 
     } 

     </div> 
    ); 
    } 
}; 

export default Statement; 

iframeコンポーネント

012:私はこの例を試してみましたよ

import React, { Component } from 'react' 

class IframeComponent extends Component { 

    componentDidMount() { 
    // Load iframe content 
    } 

    render() { 
    return (
     <div> 

     <Iframe /> 

     </div> 
    ); 
    } 
}; 

export default Iframe; 

コンポーネント魔女は、iframeのコンテンツを持っている必要があります

Handling of iframes in React

インラインフレームコンテンツがフェッチAPIから来ている、しかし、私は、IFRAMEにアクセスすることができ、コンテンツが完全にREFを使用してロードされていることがわかります。問題:handleStatementPrintの機能を別のコンポーネントから呼び出す前に、そのコンテンツをcomponentDidMountメソッドにロードする必要があります。

質問:

  1. componentDidMountmethodのコンテンツをロードするために参照文献と正しくiframeのコンテンツを渡すために、どのように?

  2. ロードされたコンテンツをcomponentDidMountメソッドから渡す方法MainComponent機能、ロードされたコンテンツでアクションを実行するには?

答えて

0

これは、引用文献がどのように働くかである:私はこれを試してみました

this.myComponent.myMethod(); 
+0

が、インラインフレームをロードする方法:コンポーネントの後

<MyComponent ref={(c) => { this.myComponent = c; }} /> 

は、コンポーネント自体とそのメソッドへのアクセスを得る搭載されていますcomponentDidMountメソッドのコンテンツ、そして別のコンポーネントのhandleStatementPrint関数は、iframeコンテンツにアクセスし、そのアクションを実行しますか? –

+0

iframeのコンテンツは同じ原点から来ますか?そうでない場合は、iFrameコンテンツに直接アクセスすることはできません。 https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy –

+0

iframeコンテンツのsrc urlはfetch APIからのものですが、iframeにアクセスしてそのコンテンツ(pdf URL)を見ることができます。 refを使用して完全にロードされます。問題:ロードされたiframeコンテンツを印刷できる別のコンポーネントからhandleStatementPrint関数を呼び出す前に、componentDidMountメソッドでそのコンテンツをロードする必要があります。 componentDidMountの内容が –

関連する問題