JavaScript:从弹出窗口获取值(外部网站)

时间:2013-11-28 06:57:16

标签: javascript jquery html jquery-ui

我正在使用此代码从弹出窗口中的字段中获取值。

http://myotherwebsitename.com/parent.html

<input type="text" id="output"/>
<button id="show">Open</button>

<script>
    document.getElementById('show').addEventListener('click', function(){
        window['output'] = document.getElementById('output');
        window.open('http://mywebsite.com/map.html')
    });
</script>  

http://mywebsite.com/map.html

<input type="text" id="user_text"/>
<input id="send" type='button' value'send'/>

<script>
    document.getElementById('send').addEventListener('click', function(){
    window.opener['output'].value = document.getElementById('user_text').value;
})
</script>

如果它们都托管在同一个网站上,那么效果很好,但是如果我将其中一个放在其他网站上则不起作用。

如何让它适用于不同的网站?

谢谢!

2 个答案:

答案 0 :(得分:2)

由于原始政策相同,您无法从其他网站获取信息。这里有一个更好的定义为什么......

在计算中,同源策略是许多浏览器端编程语言(如JavaScript)的重要安全概念。该策略允许在源自同一站点的页面上运行的脚本 - 方案,主机名和端口号[1]的组合 - 在没有特定限制的情况下访问彼此的DOM,但阻止访问不同站点上的DOM。[1]同源策略也适用于XMLHttpRequest和robots.txt。

http://en.wikipedia.org/wiki/Same-origin_policy

希望这会有所帮助。我会看看我是否可以找到解决方法并让你知道。

答案 1 :(得分:1)

是的,同样的原产地政策......

如果您有权访问外部网站,则可以通过在请求OPTIONS上设置 Access-Control-Allow-Origin 标头来授予对您的第一个域的访问权限。在这里PHP示例:

    if (isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $allowedList))
    {
        header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
        header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Max-Age: 1000');
        header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');
        exit;
    }

但您应该知道,HTTP_ORIGIN包含架构,您应该在$ allowedList中指定http和https域。