如何使用JavaScript填写另一页上的表单

前端之家收集整理的这篇文章主要介绍了如何使用JavaScript填写另一页上的表单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过 JavaScript填写表单上的字段.问题是我只知道如何在当前页面上执行JavaScript,因此我无法重定向到表单并从那里执行代码.我对使用这个术语犹豫不决,但唯一想到的是跨站脚本.我试图执行的代码如下.
<script language="javascript"> 

window.location = "http://www.pagewithaform.com";

loaded();

//checks to see if page is loaded. if not,checks after timeout.
function loaded()
{
    if(window.onLoad)
    {
      //never executes on new page. the problem
      setTitle();
    }
    else
    {
      setTimeout("loaded()",1000);
      alert("new alert");
    }
}

//sets field's value
function setTitle()
{
    var title = prompt("Field Info","Default Value");
    var form = document.form[0];
    form.elements["fieldName"].value = title;
}
</script>

我不确定这是否可行.我也对其他想法持开放态度,比如PHP.谢谢.

编辑:第二页是SharePoint表单.我无法编辑表单上的任何代码.目标是编写一个预填充大部分字段的脚本,因为其中90%是静态的.

解决方法

您正试图维护页面之间的状态.传统上有两种维持状态的方法

>将状态存储在cookie中
>将状态存储在查询字符串中

无论哪种方式,您的第一页必须保持状态(对于cookie或查询字符串),而另一页必须 – 单独 – 恢复状态.您不能在两个页面上使用相同的脚本.

示例:使用Cookie

使用cookie,第一页必须将下一页所需的所有表单数据写入cookie:

<!DOCTYPE html>
<html>
 <head>
     <title>Maintaining State With Cookies</title>
 </head>
 <body>
     <div>
         Setting cookies and redirecting...
     </div>
     <script>
         // document.cookie is not a real string
         document.cookie = 'form/title=My Name is Richard; expires=Tue,29 Aug 2017 12:00:01 UTC'
         document.cookie = 'form/text=I am demoing how to use cookies in JavaScript; expires=Tue,29 Aug 2017 12:00:01 UT';
         setTimeout(function(){
             window.location = "./form-cookies.html";
         },1000);
     </script>
 </body>
</html>

…然后第二页将读取这些cookie并用它们填充表单字段:

<!DOCTYPE html>
<html>
 <head>
     <title>Maintaining State With Cookies</title>
 </head>
 <body>
     <form id="myForm" action="submit.mumps.cgi" method="POST">
         <input type="text" name="title" />
         <textarea name="text"></textarea>
     </form>
     <script>
         var COOKIES = {};
         var cookieStr = document.cookie;
         cookieStr.split(/; /).forEach(function(keyValuePair) { // not necessarily the best way to parse cookies
             var cookieName = keyValuePair.replace(/=.*$/,""); // some decoding is probably necessary
             var cookieValue = keyValuePair.replace(/^[^=]*\=/,""); // some decoding is probably necessary
             COOKIES[cookieName] = cookieValue;
         });
         document.getElementById("myForm").getElementsByTagName("input")[0].value = COOKIES["form/title"];
         document.getElementById("myForm").getElementsByTagName("textarea")[0].value = COOKIES["form/text"];
     </script>
 </body>
</html>

示例:使用查询字符串

在使用查询字符串的情况下,第一页只包含重定向URL中的查询字符串,如下所示:

<!DOCTYPE html>
<html>
 <head>
     <title>Maintaining State With The Query String</title>
 </head>
 <body>
     <div>
         Redirecting...
     </div>
     <script>
         setTimeout(function(){
             window.location = "./form-querystring.html?form/title=My Name is Richard&form/text=I am demoing how to use the query string in JavaScript";
         },1000);
     </script>
 </body>
</html>

…然后表单将解析查询字符串(通过window.location.search在JavaScript中提供 – 前缀为?):

<!DOCTYPE html>
<html>
 <head>
     <title>Maintaining State With The Query String</title>
 </head>
 <body>
     <form id="myForm" action="submit.mumps.cgi" method="POST">
         <input type="text" name="title" />
         <textarea name="text"></textarea>
     </form>
     <script>
         var GET = {};
         var queryString = window.location.search.replace(/^\?/,'');
         queryString.split(/\&/).forEach(function(keyValuePair) {
             var paramName = keyValuePair.replace(/=.*$/,""); // some decoding is probably necessary
             var paramValue = keyValuePair.replace(/^[^=]*\=/,""); // some decoding is probably necessary
             GET[paramName] = paramValue;
         });
         document.getElementById("myForm").getElementsByTagName("input")[0].value = GET["form/title"];
         document.getElementById("myForm").getElementsByTagName("textarea")[0].value = GET["form/text"];
     </script>
 </body>
</html>

示例:使用片段标识符

还有一个选项:由于状态是严格维护在客户端(不在服务器端),您可以将信息放在片段标识符(URL的“哈希”部分)中.

第一个脚本与上面的Query String示例非常相似:重定向URL只包含片段标识符.为方便起见,我将重新使用查询字符串格式,但请注意#在哪个位置?以前是:

<!DOCTYPE html>
<html>
 <head>
     <title>Maintaining State With The Fragment Identifier</title>
 </head>
 <body>
     <div>
         Redirecting...
     </div>
     <script>
         setTimeout(function(){
             window.location = "./form-fragmentidentifier.html#form/title=My Name is Richard&form/text=I am demoing how to use the fragment identifier in JavaScript";
         },1000);
     </script>
 </body>
</html>

…然后表单必须解析片段标识符等:

<!DOCTYPE html>
<html>
 <head>
     <title>Maintaining State With The Fragment Identifier</title>
 </head>
 <body>
     <form id="myForm" action="submit.mumps.cgi" method="POST">
         <input type="text" name="title" />
         <textarea name="text"></textarea>
     </form>
     <script>
         var HASH = {};
         var hashString = window.location.hash.replace(/^#/,'');
         hashString.split(/\&/).forEach(function(keyValuePair) {
             var paramName = keyValuePair.replace(/=.*$/,""); // some decoding is probably necessary
             HASH[paramName] = paramValue;
         });
         document.getElementById("myForm").getElementsByTagName("input")[0].value = HASH["form/title"];
         document.getElementById("myForm").getElementsByTagName("textarea")[0].value = HASH["form/text"];
     </script>
 </body>
</html>

如果您无法编辑表单页面代码

Try a greasemonkey script.

猜你在找的JavaScript相关文章