我试图通过
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>