1

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

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

为此,我认为我们要么需要将 javascript 注入正在加载外部窗口的浏览器框架中,要么我们需要能够与该窗口进行交互。

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

4

4 回答 4

2

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

这是一个示例来演示:

<!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>
于 2012-08-20T21:26:36.333 回答
0

你需要做一个书签。从您的 asp.net 页面,创建一个链接,用户将其拖到他的浏览器书签中。用户单击指向您要填写的页面的链接。然后他单击新创建的书签。

在纯 javascript 中这是不可能的,这就是您需要使用书签的原因。

于 2012-08-20T20:33:15.180 回答
0

场景:你有两个页面 base.aspx 和 popup.aspx。单击 base.aspx 上的链接时,您希望打开填充了所需数据的 popup.aspx。您可以同时控制 base.aspx 和 popup.aspx

这些是我认为你可以实现这一目标的几种方法

  1. 如果您想要在 popup.aspx 上的数据已经加载到 base.aspx。然后在查询字符串中发送此数据(如果它不太长)
  2. 如果您想要在 popup.aspx 上的数据已经加载到 base.aspx。使用 popup.aspx 中的 window.opener 从 base.aspx 读取表单字段。注意:window.opener 仅在 base 和 popup 都在同一个域中时才有效。
  3. 在 popup.aspx URL (http:///popup.aspx?actiodId=1234QWE6789) 中发送标识符字符串,现在在 popup.aspx 的 page_load 中从数据库查询 actiodId 获取数据
于 2012-08-20T21:01:41.463 回答
0

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

于 2012-08-20T21:17:50.370 回答