WebBrowser/Tools/Scripts.py

branch
QtWebEngine
changeset 4743
f9e2e536d130
parent 4741
f9e1adc69076
child 4749
750577d35452
equal deleted inserted replaced
4742:f9d1090f6ab9 4743:f9e2e536d130
241 value = value.replace("'", "\\'") 241 value = value.replace("'", "\\'")
242 name = name.replace("'", "\\'") 242 name = name.replace("'", "\\'")
243 values += valueSource.format(name, value) 243 values += valueSource.format(name, value)
244 244
245 return source.format(url.toString(), values) 245 return source.format(url.toString(), values)
246
247
248 def setupFormObserver():
249 """
250 Function generating a script to monitor a web form for user entries.
251
252 @return script to monitor a web page
253 @rtype str
254 """
255 source = """
256 (function() {
257 function findUsername(inputs) {
258 for (var i = 0; i < inputs.length; ++i)
259 if (inputs[i].type == 'text' && inputs[i].value.length &&
260 inputs[i].name.indexOf('user') != -1)
261 return inputs[i].value;
262 for (var i = 0; i < inputs.length; ++i)
263 if (inputs[i].type == 'text' && inputs[i].value.length &&
264 inputs[i].name.indexOf('name') != -1)
265 return inputs[i].value;
266 for (var i = 0; i < inputs.length; ++i)
267 if (inputs[i].type == 'text' && inputs[i].value.length)
268 return inputs[i].value;
269 for (var i = 0; i < inputs.length; ++i)
270 if (inputs[i].type == 'email' && inputs[i].value.length)
271 return inputs[i].value;
272 return '';
273 }
274
275 function registerForm(form) {
276 form.addEventListener('submit', function() {
277 var form = this;
278 var data = '';
279 var password = '';
280 var inputs = form.getElementsByTagName('input');
281 for (var i = 0; i < inputs.length; ++i) {
282 var input = inputs[i];
283 var type = input.type.toLowerCase();
284 if (type != 'text' && type != 'password' &&
285 type != 'email')
286 continue;
287 if (!password && type == 'password')
288 password = input.value;
289 data += encodeURIComponent(input.name);
290 data += '=';
291 data += encodeURIComponent(input.value);
292 data += '&';
293 }
294 if (!password)
295 return;
296 data = data.substring(0, data.length - 1);
297 var url = window.location.href;
298 var username = findUsername(inputs);
299 external.autoFill.formSubmitted(url, username, password,
300 data);
301 }, true);
302 }
303
304 for (var i = 0; i < document.forms.length; ++i)
305 registerForm(document.forms[i]);
306
307 var observer = new MutationObserver(function(mutations) {
308 for (var i = 0; i < mutations.length; ++i)
309 for (var j = 0; j < mutations[i].addedNodes.length; ++j)
310 if (mutations[i].addedNodes[j].tagName == 'form')
311 registerForm(mutations[i].addedNodes[j]);
312 });
313 observer.observe(document.documentElement, { childList: true });
314
315 })()"""
316 return source
317
318
319 def completeFormData(data):
320 """
321 Function generating a script to fill in form data.
322
323 @param data data to be filled into the form
324 @type QByteArray
325 @return script to fill a form
326 @rtype str
327 """
328 source = """
329 (function() {{
330 var data = '{0}'.split('&');
331 var inputs = document.getElementsByTagName('input');
332
333 for (var i = 0; i < data.length; ++i) {{
334 var pair = data[i].split('=');
335 if (pair.length != 2)
336 continue;
337 var key = decodeURIComponent(pair[0]);
338 var val = decodeURIComponent(pair[1]);
339 for (var j = 0; j < inputs.length; ++j) {{
340 var input = inputs[j];
341 var type = input.type.toLowerCase();
342 if (type != 'text' && type != 'password' &&
343 type != 'email')
344 continue;
345 if (input.name == key)
346 input.value = val;
347 }}
348 }}
349
350 }})()"""
351
352 data = bytes(data).decode("utf-8")
353 data = data.replace("'", "\\'")
354 return source.format(data)

eric ide

mercurial