16

私はGMの概念が大好きですが、実際には、それを常に使用し、絶対的なJSの神でない限り、使用することは不可能です(たぶん私はただ吸うだけですか?)。

数行のJSを使用して、特定のサイトのページの読み込み後にそれらを実行する小さな拡張機能があると非常に便利です。しかし、それはGMが行うことではありません。GMを使用すると、厄介なセキュリティの問題と範囲のレイヤー上で複数のフレームとそれらのレイヤーを処理する必要があります。適切な手順を無視してunsafewindowまたは他のハックのいずれかを使用した場合でも、それでも機能しないことがよくあります。

JSを思いつくのはとても簡単なので、ブラウザコンソールで実行して、やりたいことを実行できますが、これは、ユーザースクリプトに転送されたときに機能しません。変更できるグリースモンキーの設定や、使いやすさを目的とした別の拡張機能はありますか?

注:私はChromeを使用しているため、その特定のブラウザで機能するソリューションにはボーナスポイントがあります。

Summery:特定のページでコンソールと同じスコープ/権限でスクリプトを自動的に実行する方法が必要です。

4

1 に答える 1

13

Firefox の Greasemonkey や、ユーザー JS を自動的に実行する Chrome のユーザースクリプトに代わる簡単な方法はありません。独自の extension/add-on を作成することもできますが、あまり意味がありません。

GM とユーザー スクリプトが提供する驚くべき余分な機能を気にせず、常に "(取得) JS の数行を取り、特定のサイトのページ読み込み後にそれらを (実行)" したい場合は、iframe を無視します。次のコードをすべてのスクリプトのベース テンプレートとして使用します。

// ==UserScript==
// @name    _Base template for simple, cross-browser, JS injection.
// @match   *://YOUR_SERVER.COM/YOUR_PATH/*
// @run-at  document-start
// ==/UserScript==

if (window.top != window.self)  //-- Don't run on frames or iframes.
    return;


function scriptMain () {
    // PUT ALL OF YOUR CODE HERE, INCLUDING ANY FUNCTIONS YOU CREATE.
    console.log ("Hello World!");
}

window.addEventListener ("load", scriptMainLoader, false);

function scriptMainLoader () {
    addJS_Node (null, null, scriptMain);
}

function addJS_Node (text, s_URL, funcToRun) {
    var D                                   = document;
    var scriptNode                          = D.createElement ('script');
    scriptNode.type                         = "text/javascript";
    if (text)       scriptNode.textContent  = text;
    if (s_URL)      scriptNode.src          = s_URL;
    if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';

    var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    targ.appendChild (scriptNode);
}

@run-at document-start(Chrome の場合) が必要ですが、ドキュメントの読み込み時にコードが起動することに注意してください。

于 2012-06-09T05:34:47.613 に答える