使用Javascript打开一个新页面并在那里填充表单值

ust*_*tun 3 javascript bookmarklet settimeout form-fields

我在书签中使用JavaScript来填充网站上的表单元素:

javascript:var f = document.forms[0];
f.getElementsByTagName('input')[0].value = 'myname';
f.getElementsByTagName('input')[1].value = 'mypassword';
f.getElementsByTagName('input')[2].click
Run Code Online (Sandbox Code Playgroud)

这有效.然而,我想创建的是一个bookmarklet,以便它打开目标页面,并在那里填充值; 然而,似乎加载了页面,其他JavaScript代码不会被执行.所以,以下不起作用.

javascript:window.location("mywebsite");var f = document.forms[0];
f.getElementsByTagName('input')[0].value = 'myname';
f.getElementsByTagName('input')[1].value = 'mypassword';
f.getElementsByTagName('input')[2].click;
Run Code Online (Sandbox Code Playgroud)

我还尝试使用setTimeout来延迟代码的执行,但这不起作用.

javascript:var f = document.forms[0];setTimeout("f.getElementsByTagName('input')[0].value = 'myname';f.getElementsByTagName('input')[1].value = 'mypassword';f.getElementsByTagName('input')[2].click;",1000);
Run Code Online (Sandbox Code Playgroud)

一旦我知道目标页面已满载,我该如何加载我的脚本?

小智 8

我不使用GreaseMonkey作为个人规则来代码不应该使用它的浏览器.当您的系统被锁定并且不允许安装Greasemonkey,Roboform等时,Bookmarklets是一种自动登录的最小公分母方法.

我编写了很多登录bookmarklet并考虑了你要做的事情:添加一些在页面加载后执行的脚本.我来到这个页面寻找解决方案,但现在我很高兴它不起作用.

想想这个的安全含义.如果可以将键击回应到加载的页面,它也可以听到击键并将它们发送到其他地方 - 非常糟糕.

如果要自动登录,请尝试这样的书签模式(删除换行符):

javascript:
    u='my_username';
    p='my_password';
    l='https://my_server/signon.aspx'; 
    if(location!=l)location=l;
    else{
     g=document.getElementById; 
     ue=(g('username') || g('userid') || g('login_name'));
     if(ue){
      ue.value=u;
      pe=(g('password') || g('pw') || g('pin'));
      pe.value = p;
      b=(g('submit_button') || g('signon_button') || g('login_button'));
      document.close();
      if(b)b.click();
     } 
    }
Run Code Online (Sandbox Code Playgroud)

单击该链接一次会转到signon.aspx页面.一旦加载页面上的用户名字段可用,再次单击相同的链接将填写表单并提交.

所以它比您希望的还要多一点,但如果您将书签放在工具栏上,那几乎没有任何延迟.祝好运!