Stanimir Stamenkov wrote:
Sun, 17 Jul 2011 21:11:48 +0300, /Stanimir Stamenkov/:

Here's already revised code to handle forms found in frames,
additionally:

let lm = Components.classes["@mozilla.org/login-manager;1"]
.getService(Components.interfaces.nsILoginManager);

function fillForms(doc) {
let forms = doc.forms;
for (let i = 0; i < forms.length; i++) {
lm.fillForm(forms[i]);
}
}

fillForms(content.document);

let frames = content.frames;
for (let i = 0; i < frames.length; i++) {
fillForms(frames[i].document);
}

Here's the code for a complimentary button which will allow saving the
passwords on pages which normally suppress it. I've generally taken the
code of the "remember password" [1] bookmarklet and enhanced it to
traverse into frames:

let ca, cea, cs;
ca = cea = cs = 0;

function rememberPasswords(document) {
let documentForms = document.forms;
for (let i = 0; i < documentForms.length; i++) {
let form = documentForms[i];
let formElements = form.elements;
if (form.hasAttribute("onsubmit")) {
form.onsubmit = "";
cs++;
}
if (form.attributes["autocomplete"]) {
form.attributes["autocomplete"].value = "on";
ca++;
}
for (let j = 0; j < formElements.length; j++) {
let element = formElements[j];
if (element.attributes["autocomplete"]) {
element.attributes["autocomplete"].value = "on";
cea++;
}
}
}
}

rememberPasswords(content.document);

let frames = content.frames;
for (let i = 0; i < frames.length; i++) {
rememberPasswords(frames[i].document);
}

function n(i, what) {
return i + " " + what + ((i == 1) ? "" : "s")
}
alert("Removed autocomplete=off from " + n(ca, "form")
+ " and from " + n(cea, "form element")
+ ", and removed onsubmit from " + n(cs, "form")
+ ". After you type your password and submit the form,"
+ " the browser will offer to remember your password.");

Having this in a chrome button rather than as a bookmarklet should make
it work in more cases where the password forms are found in frames with
a different than the embedding document origin. This should generally
make the "nsLoginManager.js" hacks suggested elsewhere, unnecessary.

[1] https://www.squarefree.com/bookmarklets/forms.html#remember_password


Thanks. Can't wait to try it out.

--
 JD..
_______________________________________________
support-seamonkey mailing list
support-seamonkey@lists.mozilla.org
https://lists.mozilla.org/listinfo/support-seamonkey

Reply via email to