web-dev-qa-db-fra.com

Comment ouvrir des fichiers SharePoint dans Chrome / Firefox

Dans Internet Explorer, je peux ouvrir les fichiers Sharepoint directement à partir de leurs liens afin que le fichier dans Sharepoint soit automatiquement mis à jour lorsque je l'enregistre. Mais dans Chrome, il demande de télécharger le fichier au lieu de simplement l’ouvrir. Dans Firefox, il peut ouvrir le fichier mais le télécharger dans un dossier temporaire, puis l'ouvrir.

Comment puis-je ouvrir directement les fichiers Sharepoint dans Chrome ou Firefox exactement comme je le fais dans Internet Explorer)?

30
Verne Jules

L'installation de l'extension Chrome IE Tab a fait le travail pour moi.

Il a la capacité de détecter automatiquement les URL afin que chaque fois que je navigue vers notre SharePoint, il émule Internet Explorer. Enfin, je peux ouvrir des documents Office directement à partir de Chrome.

Vous pouvez également installer IETab pour FireFox.

25
Sigar Dave

Vous pouvez utiliser des gestionnaires de protocole Web pour les liens tels que décrits dans la section https://sharepoint.stackexchange.com/questions/70178/how-does-sharepoint-2013-enable-editing-documents-for-chrome -et-feu-renard

Fondamentalement, il suffit de préfixer ms-Word:ofe|u| aux liens vers vos documents Word hébergés sur SharePoint.

7
LyphTEC

Merci à @LyphTEC qui a fourni un moyen très intéressant d’ouvrir un fichier Office en mode édition!

Cela m’a donné l’idée de changer la fonction _DispEx appelé lorsque l'utilisateur clique sur un fichier dans une bibliothèque de documents. En piratant la fonction d'origine, nous pouvons leur permettre d'ouvrir une boîte de dialogue (pour Firefox/Chrome) et demander à l'utilisateur s'il souhaite lire seul ou éditer le fichier: enter image description here

Voir ci-dessous le code JavaScript que j'ai utilisé. Mon code est destiné aux fichiers Excel, mais il pourrait être modifié pour fonctionner également avec les documents Word:

    /**
 * fix problem with Excel documents on Firefox/Chrome (see https://blog.kodono.info/wordpress/2017/02/09/how-to-open-an-Excel-document-from-sharepoint-files-into-chromefirefox-in-readonlyedit-mode/)
 * @param  {HTMLElement} p the <A> element
 * @param  {HTMLEvent} a the click event
 * @param  {Boolean} h TRUE
 * @param  {Boolean} e FALSE
 * @param  {Boolean} g FALSE
 * @param  {Strin} k the ActiveX command (e.g. "SharePoint.OpenDocuments.3")
 * @param  {Number} c 0
 * @param  {String} o the activeX command, here we look at "SharePoint.OpenDocuments"
 * @param  {String} m
 * @param  {String} b the replacement URL to the xslviewer
 */
var bak_DispEx;
var modalOpenDocument; // it will be use with the modal
SP.SOD.executeOrDelayUntilEventNotified(function() {
  bak_DispEx = _DispEx;
  _DispEx=function(p, a, h, e, g, k, c, o, m, b, j, l, i, f, d) {
    // if o==="SharePoint.OpenDocuments" && !IsClientAppInstalled(o)
    // in that case we want to open ask the user if he/she wants to readonly or edit the file
    var fileURL = b.replace(/.*_layouts\/xlviewer\.aspx\?id=(.*)/, "$1");
    if (o === "SharePoint.OpenDocuments" && !IsClientAppInstalled(o) && /\.xlsx?$/.test(fileURL)) {
      // if the URL doesn't start with http
      if (!/^http/.test(fileURL)) {
        fileURL = window.location.protocol + "//" + window.location.Host + fileURL;
      }
      var ohtml = document.createElement('div');
      ohtml.style.padding = "10px";
      ohtml.style.display = "inline-block";
      ohtml.style.width = "200px";
      ohtml.style.width = "200px";
      ohtml.innerHTML = '<style>'
                      + '.opendocument_button { background-color:#fdfdfd; border:1px solid #ababab; color:#444; display:inline-block; padding: 7px 10px; }'
                      + '.opendocument_button:hover { box-shadow: none }'
                      + '#opendocument_readonly,#opendocument_edit { float:none; font-size: 100%; line-height: 1.15; margin: 0; overflow: visible; box-sizing: border-box; padding: 0; height:auto }'
                      + '.opendocument_ul { list-style-type:none;margin-top:10px;margin-bottom:10px;padding-top:0;padding-bottom:0 }'
                      + '</style>'
                      + 'You are about to open:'
                      + '<ul class="opendocument_ul">'
                      + '  <li>Name: <b>'+fileURL.split("/").slice(-1)+'</b></li>'
                      + '  <li>From: <b>'+window.location.hostname+'</b></li>'
                      + '</ul>'
                      + 'How would like to open this file?'
                      + '<ul class="opendocument_ul">'
                      + '  <li><label><input type="radio" name="opendocument_choices" id="opendocument_readonly" checked> Read Only</label></li>'
                      + '  <li><label><input type="radio" name="opendocument_choices" id="opendocument_edit"> Edit</label></li>'
                      + '</ul>'
                      + '<div style="text-align: center;margin-top: 20px;"><button type="button" class="opendocument_button" style="background-color: #2d9f2d;color: #fff;" onclick="modalOpenDocument.close(document.getElementById(\'opendocument_edit\').checked)">Open</button> <button type="button" class="opendocument_button" style="margin-left:10px" onclick="modalOpenDocument.close(-1)">Cancel</button></div>';
      // show the modal
      modalOpenDocument=SP.UI.ModalDialog.showModalDialog({
        html:ohtml,
        dialogReturnValueCallback:function(ret) {
          if (ret!==-1) {
            if (ret === true) { // edit
              // reformat the fileURL
              var ext;
              if (/\.xlsx?$/.test(b)) ext = "ms-Excel";
              if (/\.docx?$/.test(b)) ext = "ms-Word"; // not currently supported
              fileURL = ext + ":ofe|u|" + fileURL;
            }
            window.location.href = fileURL; // open the file
          }
        }
      });
      a.preventDefault();
      a.stopImmediatePropagation()
      a.cancelBubble = true;
      a.returnValue = false;
      return false;
    }
    return bak_DispEx.apply(this, arguments);
  }
}, "sp.scriptloaded-core.js")

J'utilise SP.SOD.executeOrDelayUntilEventNotified pour s’assurer que la fonction sera exécutée quand core.js est chargé.

3
AymKdn