現在の Web ページ「location.ref」の URL を取得して Google スプレッドシートに保存する、単純なブックマークレットを作成したいと考えています。保存した後、現在の Web ページにとどまりたい。
私が知っている唯一の Google スプレッドシートへの書き込み方法は、Google App Script を使用することです。そこで、まさにそれを行う簡単なスクリプトを作成しました。
function doGet(request) {
var ss = SpreadsheetApp.openByUrl( "https://docs.google.com/spreadsheet/ccc?key=<MY-SPREADSHEET-ID>");
var sheet = ss.getSheets()[0];
var headers = ["Timestamp", "url"];
var nextRow = sheet.getLastRow();
var cell = sheet.getRange('a1');
var col = 0;
for (i in headers){
if (headers[i] == "Timestamp"){
val = new Date();
} else {
val = request.parameter[headers[i]];
}
cell.offset(nextRow, col).setValue(val);
col++;
}
return ContentService.createTextOutput(request.parameter.url)
.setMimeType(ContentService.MimeType.TEXT);
}
これをwebappとして公開しました。私はブックマークレットを書きました:
<a href="javascript:(
function(){
alert(window.open('https://script.google.com/macros/s/<MYWEBAPP>/exec?url='+encodeURIComponent(location.href), '_self'));
}
)();">
BOOKMARK
</a>
ここまでは順調ですね。ブックマークレットをクリックすると実際に機能し、現在の Web ページの URL を取得してスプレッドシートに保存します。しかし、その後、webapp がテキスト応答を返し、ブックマークレットがテキストを表示して、現在の Web サイトから離れてしまいます。
応答を無視する方法はありますか? GAS webapp スクリプトでは、何かを返さなければならない doGet() を使用する必要があります。GASスクリプトから何も返さない方法はありますか? または、他の呼び出しを使用して window.open を置き換えて、応答を変数に保存して無視できるようにする webapp を呼び出す方法はありますか?