アクセスGreasemonkeyのメタデータの確かなスクリプト?
-
01-07-2019 - |
質問
アクリプトで取得するメタデータの値を宣言された独自のヘッダ?などを満たすものがありませんが有望のAPIを除く GM_getValue()
.このコースを含む特別な名前の構文です。しかし、例えば: GM_getValue("@name")
.
意欲のあちこちを回避することであ冗長な仕様となります。
まGMメタデータを直接アクセスもあり方の身体のスクリプトそのものです。それは確かに、記憶のどこかでなにも恐ろしく難しい構文解析のための "// @"
.(する必要があるという私の場合はその値がんの関心は、わが国における @version
, る拡張値を読み取り userscripts.org.)
解決
この答えは出日時: としてのGreasemonkey0.9.16(2012年)をご覧ください ブロックの回答 に関する GM_info
そうです。シンプルな例です:
var metadata=<>
// ==UserScript==
// @name Reading metadata
// @namespace http://www.afunamatata.com/greasemonkey/
// @description Read in metadata from the header
// @version 0.9
// @include https://stackoverflow.com/questions/104568/accessing-greasemonkey-metadata-from-within-your-script
// ==/UserScript==
</>.toString();
GM_log(metadata);
見 このスレッドのgreasemonkey-ユーザーグループ ます。より強固な実施の近くに見つけることができる。
他のヒント
使用 の GM_info
オブジェクト, に、Greasemonkeyバージョン0.9.16.
例えば、このスクリプト:
// ==UserScript==
// @name _GM_info demo
// @namespace Stack Overflow
// @description Tell me more about me, me, ME!
// @include http://stackoverflow.com/questions/*
// @version 8.8
// ==/UserScript==
unsafeWindow.console.clear ();
unsafeWindow.console.log (GM_info);
で出力このオブジェクト:
{
version: (new String("0.9.18")),
scriptWillUpdate: false,
script: {
description: "Tell me more about me, me, ME!",
excludes: [],
includes: ["http://stackoverflow.com/questions/*"],
matches: [],
name: "_GM_info demo",
namespace: "Stack Overflow",
'run-at': "document-end",
unwrap: false,
version: "8.8"
},
scriptMetaStr: "// @name _GM_info demo\r\n// @namespace Stack Overflow\r\n// @description Tell me more about me, me, ME!\r\n// @include http://stackoverflow.com/questions/*\r\n// @version 8.8\r\n"
}
ビアテナの答えが、ここが私の一般化液を利オブジェクトの名前と値のペアを表すメタデータの物件です。なお特定のプロパティが複数の値(@には、@を除く,@、@resource)と私のパーサで捉え方として配列またはの場合には@に資源としての下位オブジェクトの名前と値のペアになっています。
var scriptMetadata = parseMetadata(.toString()); function parseMetadata(headerBlock) { // split up the lines, omitting those not containing "// @" function isAGmParm(element) { return /\/\/ @/.test(element); } var lines = headerBlock.split(/[\r\n]+/).filter(isAGmParm); // initialize the result object with empty arrays for the enumerated properties var metadata = { include: [], exclude: [], require: [], resource: {} }; for each (var line in lines) { [line, name, value] = line.match(/\/\/ @(\S+)\s*(.*)/); if (metadata[name] instanceof Array) metadata[name].push(value); else if (metadata[name] instanceof Object) { [rName, rValue] = value.split(/\s+/); // each resource is named metadata[name][rName] = rValue; } else metadata[name] = value; } return metadata; } // example usage GM_log("version: " + scriptMetadata["version"]); GM_log("res1: " + scriptMetadata["resource"]["res1"]);
ここでも私のためのイントロダクションです。
編集:追加資源@必要と導入した"Greasemonkey0.8.0.
編集:FF5+互換性を配列に格納します。フィルター()なィレクティブには正規表現を指定