Google ChromeはunsafeWindow
ユーザー スクリプトを定義するようになりましたが、ターゲット ページの 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);
}