1

私の問題は、Tumblrのtinymceエディターのコンテンツをユーザースクリプトで取得しようとしていることです。Firefoxでは、これは完全に機能します。

var tm = (unsafeWindow.tinyMCE) ? unsafeWindow.tinyMCE : null;  
if(tm!= null){
    var _tempcontent = tm.activeEditor.getContent();
    console.log(_tempcontent);
}

しかし、Chromeでは「未定義」になり、unsafeWindowを修正すると、Firefoxに存在するのに、tinymceインスタンスが見つかりませんでした。

4

1 に答える 1

1

Google ChromeunsafeWindowユーザー スクリプトを定義するようになりましたが、ターゲット ページの JavaScript オブジェクトへのアクセスは許可されません。DOM へのアクセスのみを許可します。

回避策として、この回答unsafeWindowに示されているように、スクリプトにフル機能のクロスブラウザを提供できます。

/*--- Create a proper unsafeWindow object on browsers where it doesn't exist
    (Chrome, mainly).
    Chrome now defines unsafeWindow, but does not give it the same access to
    a page's javascript that a properly unsafe, unsafeWindow has.
    This code remedies that.
*/
var bGreasemonkeyServiceDefined     = false;

try {
    if (typeof Components.interfaces.gmIGreasemonkeyService === "object") {
        bGreasemonkeyServiceDefined = true;
    }
}
catch (err) {
    //Ignore.
}

if ( typeof unsafeWindow === "undefined"  ||  ! bGreasemonkeyServiceDefined) {
    unsafeWindow    = ( function () {
        var dummyElem   = document.createElement('p');
        dummyElem.setAttribute ('onclick', 'return window;');
        return dummyElem.onclick ();
    } ) ();
}

または、スクリプト インジェクションを使用するようにスクリプトをリファクタリングすることもできます...

function main () {
    //--- PUT EVERYTHING IN THIS WRAPPER FUNCTION...
    var tm = tinyMCE;
    if (tm!= null) {
        var _tempcontent = tm.activeEditor.getContent();
        console.log(_tempcontent);
    }
}

addJS_Node (null, null, main);


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;
    //--- Don't error check here. if DOM not available, should throw error.
    targ.appendChild (scriptNode);
}
于 2012-06-08T08:19:04.063 に答える