質問: HtmlService .createHtmlOutput('言葉リンクリンク2') .setSandboxMode(HtmlService.SandboxMode.IFRAME) .setWidth(250) .setHeight(300); SpreadsheetApp.getUi().showModelessDialog(htmlOutput, 'タイトル'); } ``` 補足(個人専用のフィルタについて) ----------------- ![個人専用のフィルタ](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/d7edae0a22803d4f79d7bd9f81e1fef8.png) ポップアップメッセージに表示するリンク先を↑の各フィルタにした、ということです。 リンクは上手くできていますが、別タブで開くので スプレッドシートを開いたときのポップアップメッセージが 再度出てしまい、邪魔だなと。。。思い質問いたしました。 初心者で説明も下手くそで申し訳ございません。 解決したいこと ------- シートを開いたときにメッセージが表示され、フィルタで絞り込まれたスプレッドシートが開くのですが、 フィルタがかかったスプレッドシートが別タブで開いてしまいます。 別タブで開いてしまうことで、ポップアップメッセージが再度表示されてしまします。 **- リンクが別タブで開かないようにする方法** **- 個人フィルタがかかったのシートが別タブで表示された際に、ポップアップメッセージが出ないようにする方法** 上記のどちらか2点を教えていただきたいです。
回答: 結論から言って、その回避はできないと思います。 面倒な、あるいはさほど便利でない、回避方法については、下にかいてます。 * リンクが別タブで開かないようにする方法 検証してないんですが、 ``` .createHtmlOutput('言葉リンクリンク2') ``` こうすれば、もしや、と思います。というのはaタグのtargetは、開くタブを指定するもので、そこに何か書いちゃうとだいたい新タブになります。同じタブにするには、ブラウザの現在のタブ名(つまりthisのname)を指定すれば開き先を自タブにもできるはず。 ただ、同じタブであっても、urlからシートを開いちゃうと、スプレッドシートのonOpenを抑制できないと思う * 個人フィルタがかかったのシートが別タブで表示された際に、ポップアップメッセージが出ないようにする方法 ここなんですが、別タブだからじゃなくて、「onOpen」が発生するからなんですよね。 onOpenはonOpen(e)とイベントパラメータを貰うのですが、そこに有益な情報がないんです。 なので、「リンクから開いたときに、何らかの条件を利用して、onOpen中の処理を抑止する」ができきないと思う ### 他の方法 1. (面倒な方法)スクリプトをがんばれば、スクリプトで「フィルタ設定」を作って、フィルタを効かせた状態にすることができます。 検証したのですが、はりつけていただいた普通の機能でフィルタをつけたもの、はスクリプトからは呼び出せないっぽい(手動付与したフィルタをしてるのに、フィルタがないっていう結果になる) ●なので、今の設定と同じことをスクリプトで作り込むしかないですが、やりかたが結構面倒(普通のjsにはない処理なので...)。最初コメントしてたのは、この作り込みができていると思ったので、onOpenで実行するだけじゃん、と思ったのでした。 2. (さほど便利でない方法)モーダルダイアログをやめる。何かのボタンを押したら出るようにするか、toastにリンクが書けるならtoastで一定時間後に勝手に閉じるからよしとするか、1行目にはデータをかかないことにして、onOpenでA1セルにurlを出すとか、を考える