diff -uNr jsactions_2.2.0/chrome/content/cscript.js jsactions-modified/chrome/content/cscript.js --- jsactions_2.2.0/chrome/content/cscript.js 2006-03-01 18:41:04.343750000 +0900 +++ jsactions-modified/chrome/content/cscript.js 2006-03-10 21:17:43.000000000 +0900 @@ -20,7 +20,8 @@ onLink: false, link: false, onImage: false, - isTextSelected: (this._getFocusedWindow().getSelection().toString().length != 0) + // _contextMenuObject.isTextSelected は呼び出さない。 + // isTextSelected: (this._getFocusedWindow().getSelection().toString().length != 0) } } }, @@ -31,11 +32,29 @@ else return focusedWindow; }, + get selection() { + var targetWindow = this._getFocusedWindow(); + var sel = Components.lookupMethod(targetWindow, 'getSelection').call(targetWindow); + // for textfields + if (sel && !sel.toString()) { + var node = document.commandDispatcher.focusedElement; + if (node && + (node.type == "text" || node.type == "textarea") && + 'selectionStart' in node && + node.selectionStart != node.selectionEnd) { + var offsetStart = Math.min(node.selectionStart, node.selectionEnd); + var offsetEnd = Math.max(node.selectionStart, node.selectionEnd); + return node.value.substr(offsetStart, offsetEnd-offsetStart); + } + } + + return sel ? sel.toString() : ""; + }, get target(){ return this._contextMenuObject.target; }, get onLink(){ return this._contextMenuObject.onLink; }, get link(){ return this._contextMenuObject.link; }, get onImage(){ return this._contextMenuObject.onImage; }, - get isTextSelected(){ return this._contextMenuObject.isTextSelected; } + get isTextSelected(){ return this.selection.length != 0; } }, //Add by HideAway - Toggle AllowJavaScriptThisTab