Ermitteln, was verwendeter Browser bei execCommand(...) einfügt
Unbenannt1
- javascript
Ich möchte ermitteln, was der verwendete Browser zum Beispiel bei execCommand("italic", false, null); einfügt. Ich bereits versucht, es einfach "auszuprobieren", indem ich eine iframe mit dem Inhalt <html><head></head><body>hallo</body></html> erstelle, aber ich schaffe es nicht, den Text im Firefox zu markieren (im IE funktioniert es). Außerdem weiß ich nicht ob es nicht eine schönere Lösung für dieses Problem gibt.
Der Code zum Markieren lautet
if(document.selection) {
var range = testdoc.body.createTextRange();
range.moveToElementText(testdoc.body);
range.select();
}
else if(window.getSelection) {
var range = testdoc.createRange();
range.selectNode(testdoc.body);
window.getSelection().addRange(range);
}
var range = testdoc.createRange();
range.selectNode(testdoc.body);
window.getSelection().addRange(range);
Verwendest du auch das window-Objekt des iframes? Anscheinend nicht. window verweist üblicherweise auf das aktuelle window-Objekt, nicht auf das window-Objekt des Dokuments im iframe.
iframeElement.contentWindow liefert dir das window-Objekt
oder
iframeElement.contentDocument.defaultView
oder einfach
http://de.selfhtml.org/javascript/objekte/frames.htm@title=frames.iframeName
Mathias
var range = testdoc.createRange();
range.selectNode(testdoc.body);
window.getSelection().addRange(range);Verwendest du auch das window-Objekt des iframes? Anscheinend nicht. window verweist üblicherweise auf das aktuelle window-Objekt, nicht auf das window-Objekt des Dokuments im iframe.
iframeElement.contentWindow liefert dir das window-Objekt
oder
iframeElement.contentDocument.defaultView
oder einfach
http://de.selfhtml.org/javascript/objekte/frames.htm@title=frames.iframeNameMathias
if(document.selection) {
var range = testdoc.body.createTextRange();
range.moveToElementText(testdoc.body);
range.select();
}
else if(window.getSelection) {
var range = testdoc.createRange();
range.selectNode(testdoc.body);
testframe.contentWindow.getSelection().addRange(range);
alert("hallo2");
}
Danke, funktioniert aber immer noch nicht.
Danke, funktioniert aber immer noch nicht.
Dann machst du noch etwas anderes falsch.
Beispiel:
foo.html
<!DOCTYPE html>
<p><iframe name="iframe" src="bar.html"></iframe></p>
<script>
[code lang=javascript](function () {
var iWindow = window.frames.iframe;
iWindow.onload = loaded;
function loaded () {
var iDocument = iWindow.document;
if (iDocument.selection) {
var range = iDocument.body.createTextRange();
range.moveToElementText(iDocument.body);
range.select();
} else if (iWindow.getSelection) {
var range = iDocument.createRange();
range.selectNode(iDocument.body);
var selection = iWindow.getSelection();
selection.addRange(range);
}
}
})();
</script>[/code]
bar.html
<!DOCTYPE html>
<html>
<body>
<p>bar</p>
</body>
</html>
Funktioniert wie erwartet. Allerdings nicht lokal über file://, da werfen einige Browser eine Fehlermeldung wegen Verletzung der Same-Origin Policy.
Übrigens geht auch einfach:
var selection = iWindow.getSelection();
selection.selectAllChildren(iDocument.body);
Eine Range musst du nicht unbedingt anlegen und hinzufügen. selectAllChildren der Selection reicht.
Mathias
Übrigens geht auch einfach:
var selection = iWindow.getSelection();
selection.selectAllChildren(iDocument.body);
>
> Eine Range musst du nicht unbedingt anlegen und hinzufügen. selectAllChildren der Selection reicht.
>
> Mathias
Danke, mit selectAllChildren funktioniert es jetzt.