2017-03-27 12 views
0

私はAngular 2を使用してアプリケーションのフロントエンドを作成していますが、XMLHttpRequestを使用してサードパーティのサイトから画像をロードしようとしています。XMLHttpRequestでエラーが発生しました - "いいえ 'Access-Control-Allow-Origin'ヘッダーが要求されたリソースに存在します。

loadFile(fileUrl) { 

    const promise = new Promise((resolve, reject) => { 

     const request = new XMLHttpRequest(); 
     request.open('GET', fileUrl, true); 
     request.setRequestHeader('Accept', 'image/jpeg'); 

     request.onload =() => { 
     if (request.status === 200) { 
      resolve(request); 
     } 
     else { 
      reject(Error(request.statusText)); 
     } 
     }; 

     request.onerror =() => { 
     reject(Error('Network error.')); 
     }; 

     request.send(); 
    }); 

    return promise; 
    } 

そして、これは私がそれをテストするために使用していたコードです:

私のコードは以下の通りです私は、インターネットを中心に見てきたし、いくつかのページは、私がすべきことを言っ

import FileHelper from './file-helper'; 

describe('File Helper',() => { 

    it('should retrieve the contents of an image on the web', (done) => { 
    let fileLoadPromise, fileContent; 

    fileLoadPromise = FileHelper.loadFile('http://adsoftheworld.com/files/steve-jobs.jpg'); 

    fileLoadPromise.then((request: XMLHttpRequest) => { 

     fileContent = request.responseText; 
     expect(request.responseType).toEqual('image/jpeg'); 
     done(); 

    }).catch(error => { 
     console.log(error); 
     done.fail(); 
    }); 

    expect(fileContent).toBeTruthy(); 
    }); 
}); 

image/jpegを私のヘッダーに追加してください:request.setRequestHeader('Accept', 'image/jpeg');しかし、私はこのコードを実行する度に以下のエラーが表示されます:

誰も助けてくれますか?

+0

'adsoftheworld.com'は、ページ上のスクリプトが応答の内容を読み取ることができ、その応答で'アクセス制御 - 許可 - Origin'ヘッダーを提供する必要があります。これは、信頼できないスクリプトが他のサイトの内容を、まともなユーザーがスクリプトを実行しているかのように読み取らないようにするセキュリティメカニズムです。一番きれいな解決策は、サーバー側のプロキシを使用して他のサイトのコンテンツを取得し、Webページと同じ起点のスクリプトに対する応答の内容を提供することです。 – apsillers

答えて

3

CORS、https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS ヘッダーのアクセス制御許可元:*を指定すると、ajaxでイメージにアクセスできますが、その理由はなぜajaxですか? imgタグを使用するだけですか?

<img src="http://adsoftheworld.com/files/steve-jobs.jpg"/>

+0

こんにちは、imgタグは本当に私が探していたものでした...私はまだAngularを学んでいて、私はこのオプションを持っていたことを忘れていました...私は解決策を単純すぎると思います...助けてくれてありがとう! – Felipe

+1

@Felipe幸運、角2、一緒に行く良いフレームワークと:) – YoungLearnsToCoding

関連する問題