从网页预填充网页

Pre-fill a web page from a web page

本文关键字:网页 填充      更新时间:2023-09-26

我们在Windows应用程序中有一个功能,可以打开web浏览器,导航到某些预先配置的网站,并用数据库中的数据自动填充表单——这对用户来说是一个方便的功能。

现在,我们想构建这个功能的Asp.Net版本,这样用户就可以从我们的web应用程序中单击链接/按钮,然后我们打开页面(使用JavaScript重定向?)。然后我们填写表格,以便用户可以查看数据并提交。

要做到这一点,我认为我们要么需要将javascript注入加载外部窗口的浏览器框架,要么需要能够与该窗口交互。

我们担心浏览器安全可能不允许这样做——这可能看起来像某种欺骗攻击。这样做的好方法是什么?

如果打开弹出窗口的网站和在弹出窗口中打开的网站之间的域、协议和端口不匹配,则您的代码将违反同源策略,要么被静默忽略,要么引发异常。

下面是一个示例:

<!doctype html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<script type="text/javascript">
    openPopUp = function(href) {
        var props = "width=500,height=500,menubar=no,toolbar=no,scrollbars=yes";
        var win = window.open(href, href, props);
        if (win == null) alert("Your popup blocker is ruining my demo.");
        return win;
    };
    openMe = function(url){
        href = (url=="")?document.location:url;
        pu = openPopUp(href);
        //This will be ignored silently if Same Origin Policy is violated
        pu.onload = function() { 
            p = pu.document.createElement("p");
            p.appendChild(pu.document.createTextNode("onload was here."));
            pu.document.body.appendChild(p);
        };
        //This will throw an exception if Same Origin Policy is violated
        setTimeout(function() { 
            p = pu.document.createElement("p");
            p.appendChild(pu.document.createTextNode("setTimeout was here."));
            pu.document.body.appendChild(p);
        },3000);
        return false;
    }
</script>
<body>
<a href="" onclick="return openMe(this.href);">Self</a>
<a href="https://www.google.com/" onclick="return openMe(this.href);">Google</a>

您需要制作一个bookmarklet。在你的asp.net页面上,创建一个链接,用户可以拖动该链接到他的浏览器书签。用户单击指向要填写的页面的链接。然后他点击新创建的小书签。

在纯javascript中,这是不可能的,这就是为什么您需要使用bookmarklet。

场景:您有两个页面base.aspx和popup.aspx。单击base.aspx上的链接,您将打开popup.aspx,其中包含所需的数据。您同时控制base.aspx和popup.aspx

我认为你可以通过以下几种方式实现

  1. 如果您在popup.aspx上想要的数据已经加载在base.aspx上。然后在querystring中发送此数据(如果不太长)
  2. 如果您想要的popup.aspx上的数据已经加载到base.aspx上。请使用popup.aspx中的window.opener从base.aspx中读取表单字段。注意:只有当基本和弹出窗口都在同一域中时,window.openner才会起作用
  3. 在popup.aspx URL中发送标识符字符串(http:///popup.aspx?actiodId=1234QWE6789),现在位于popup.aspx的page_load中,从activId上的DB查询中获取数据

做您正在尝试做的事情的最好方法是创建一个浏览器插件。请尝试在此处查找更多信息。但是使用浏览器插件,您可以完全控制DOM,并且可以注入javascript代码来执行您正在执行的操作。如果需要,您甚至可以从插件中调用web服务。