Open blob objectURL in Chrome

后端 未结 6 1580
挽巷
挽巷 2020-12-24 06:22

I want to open a PDF in a new tab in chrome browser (Chrome 56.0.2924.87, Ubuntu 14.04) using window.open(fileObjectURL) in javascript. I am creating the blob f

6条回答
  •  有刺的猬
    2020-12-24 07:07

    You must open new window before you put blob url in window:

    let newWindow = window.open('/')

    Also you can use some another page like /loading, with loading indicator.

    Then you need to wait newWindow loading, and you can push url of your blob file in this window:

    newWindow.onload = () => {
        newWindow.location = URL.createObjectURL(blob);
    };
    

    Adblock extension don't block it.

    I'm using it with AJAX and ES generators like this:

    let openPDF = openFile();
    openPDF.next();
    axios.get('/pdf', params).then(file => {
      openPDF.next(file);
    });
    
    function* openFile() {
      let newWindow = window.open('/pages/loading');
      // get file after .next(file)
      let file = yield;
      // AJAX query can finish before window loaded,
      // So we need to check document.readyState, else listen event
      if (newWindow.document.readyState === 'complete') {
        openFileHelper(newWindow, file);
      } else {
        newWindow.onload = () => {
          openFileHelper(newWindow, file);
        };
      }
    }
    
    function openFileHelper(newWindow, file) {
      let blob = new Blob([file._data], {type: `${file._data.type}`});
      newWindow.location = URL.createObjectURL(blob);
    }
    

提交回复
热议问题