unsafeWindow 相當於 window.
wrappedJSObject,HTMLElement.prototype 在 GM 裡要寫成 HTMLElement.wrappedJSObject.prototype
以下參考:
https://gist.github.com/781650代碼:
// ==UserScript==
// @author think49
// @name outerHTML.js
// @description outerHTML.js : HTML5 規定の element.outerHTML を定義する。
// @namespace https://gist.github.com/781650
// @version 1.4
// @include *
// ==/UserScript==
/**
* outerHTML.js
*
* @version 1.4
* @author think49
*/
if (!('outerHTML' in document.createElement('p')) && 'innerHTML' in document.createElement('p') && (typeof HTMLElement === 'function' || typeof HTMLElement === 'object')) {
(function () {
var _Node = (typeof Node === 'function' || typeof Node === 'object') ? Node : {
ELEMENT_NODE: 1,
ATTRIBUTE_NODE: 2,
TEXT_NODE: 3,
CDATA_SECTION_NODE: 4,
ENTITY_REFERENCE_NODE: 5,
ENTITY_NODE: 6,
PROCESSING_INSTRUCTION_NODE: 7,
COMMENT_NODE: 8,
DOCUMENT_NODE: 9,
DOCUMENT_TYPE_NODE: 10,
DOCUMENT_FRAGMENT_NODE: 11,
NOTATION_NODE: 12
};
function getOuterHTML () {
var node;
node = this.ownerDocument.createElement('body');
node.appendChild(this.cloneNode(true));
return node.innerHTML;
}
function setOuterHTML (htmlString) {
var doc, parentNode, node, df;
parentNode = this.parentNode;
if (!parentNode) { // HTML5 3.5.6 (step2)
return;
}
if (parentNode.nodeType === _Node.DOCUMENT_NODE) { // HTML5 3.5.6 (step3)
throw new Error('NO_MODIFICATION_ALLOWED_ERR');
}
doc = this.ownerDocument;
node = doc.createElement('body');
node.innerHTML = htmlString;
node = node.firstChild;
df = doc.createDocumentFragment();
while (node) {
df.appendChild(node);
node = node.nextSibling;
}
parentNode.replaceChild(df, this);
}
if ('defineProperty' in Object) { // ECMAScript 5
Object.defineProperty(this, 'outerHTML', {get: getOuterHTML, set: setOuterHTML});
return;
}
if ('__defineGetter__' in this && '__defineSetter__' in this) { // for Firefox
this.__defineGetter__('outerHTML', getOuterHTML);
this.__defineSetter__('outerHTML', setOuterHTML);
}
}).call(HTMLElement.wrappedJSObject.prototype);
}
/* 以本頁面演示
alert(document.getElementById('pagecontent').wrappedJSObject.outerHTML);
document.getElementById('pagecontent').wrappedJSObject.outerHTML="<div>修改</div>";
*/
最後我加了一段用本頁面 ID="pagecontent" 的元素的演示,你可以取消註解玩看看。