SharePoint : チームサイトやコミュニケーションサイトではライブラリにアップロードした.aspxファイルはクリックすると表示されずにダウンロードされてしまう

SharePoint Online の場合、HTMLファイルをライブラリにアップロードしても、ファイルをクリックすると表示されずにダウンロードされてしまいます。この場合の対策として、単に拡張子を.aspxに変更するだけで解決し、以下の太田さんの記事が参考になります。

静的 HTML ファイルを SharePoint にアップロードして公開する | idea.toString();
http://idea.tostring.jp/?p=1717

この方法でHTMLファイルを SharePoint Online のライブラリに保管して表示したりできるのですが、コミュニケーションサイトで同じ事をしたら、.aspxファイルをクリックすると表示ではなくダウンロードされてしまいました。まずは現象を再現してみます。

■再現

まず、拡張子を.aspxにしたファイルを用意します。(ソースはHTMLです。)

▼検証用途なので非常に簡単なHTMLです。作成後、拡張子を.aspxに変更します。

▼まずは SharePoint 管理センターから作成したサイトのライブラリにアップします。

▼sample.aspxをクリックするとブラウザ内に表示されます。(もっとわかりやすくサンプルがよかったですね…ゴメンナサイ。)

ここまでは想定の動作です。次はコミュニケーション サイトでやってみます。

▼コミュニケーション サイトを作成します。

▼作成されました。

▼ドキュメント ライブラリに移動し、先程と同じsample.aspxをアップロードします。そしてクリックすると…

▼クリックすると表示されずにダウンロードとなってしまいます。

■原因

正直言うと急いで解決したかったので人に聞いて回りました。そこで疑われたのが「カスタムスクリプト が禁止になっているのでは?」との事。

カスタム スクリプトを許可または禁止する – Office サポート
https://support.office.com/ja-jp/article/1f2c515f-5d7e-448a-9fd7-835da935584f

ではやってみましょう。

■対策

結局これも以前コミュニケーション サイトで外部ユーザーを招待できなかった際の対策と同じく、僕の苦手な PowerShell で対応します。

▼SharePoint Online Management Shell をダウンロードしてインストールします。

Download SharePoint Online Management Shell from Official Microsoft Download Center
https://www.microsoft.com/ja-jp/download/details.aspx?id=35588

▼SharePoint Online Management Shell を起動します。

SharePoint 管理センターに接続する以下のコマンドを実行します。

Connect-SPOService -Url https://<<hogehoge1>>-admin.sharepoint.com -Credential <<hogehoge2@hogehoge.com>>

<<hogehoge1>>:自分の環境に合わせて変更してください。
<<hogehoge2@hogehoge.com>>:管理者のアカウントのメールアドレス

▼サインインを促されるのでサインインしてください。

カスタム スクリプトを許可する以下のコマンドを実行します。(上述で紹介した Office サポートのページ内に記載されていたのを利用します。)

Set-SPOsite <SiteURL> -DenyAddAndCustomizePages 0

<SiteURL>:サイトのURL

実行すると相変わらず特に反応はなくスンっと終わります。

さて、これで.aspxファイルをクリックするとダウンロードじゃなくブラウザ内で表示されれば解決です!

▼おいおい、クリックしてもダウンロードされるぞ!

カスタム スクリプトの禁止が原因ではなかった!?と思いましたが、一応試してみようと思ったのが、.aspxファイルをアップロードし直す!

▼すでにアップロードしているファイルを一旦削除します。

▼再び同じsample.aspxファイルをアップロードします。そしてクリック!

▼やった!ダウンロードされずにブラウザ内で表示された!

って事でライブラリにアップロードした.aspxファイルがクリックすると表示されずにダウンロードされてしまう場合は、

  1. PowerShell でカスタム スクリプトを許可する。
  2. すでにアップロードしているファイルは再アップロードする。

という大きく2つの手順で解決できました。

PowerShell に慣れていない人はいろいろと怖いので検証用サイトコレクションを作ってテストしてみると良いですね。また、そもそもカスタム スクリプトを禁止から許可に変更した際の影響範囲なども考えないとですね。