在第三方域上调用JavaScript

在第三方域上调用JavaScript,javascript,dom,cross-domain-proxy,Javascript,Dom,Cross Domain Proxy,我想编写一些javascript,并将其调用到DOM中,用于从第三方域加载的页面。这能做到吗?看起来像是我已经尝试使用的IFRAME,但似乎不起作用。这是不是像让FF直接运行javascript而不是作为页面的一部分 我知道这有各种各样的安全问题,但我是编写代码的人,也是唯一会运行它的人 背景故事:我正在尝试自动化一些网站迭代 我的FirstIFRAMEpass无法使用,因为file:////....与http://whatever.com。惊喜,惊喜。JavaScript具有相同的域策略。您

我想编写一些javascript,并将其调用到DOM中,用于从第三方域加载的页面。这能做到吗?看起来像是我已经尝试使用的
IFRAME
,但似乎不起作用。这是不是像让FF直接运行javascript而不是作为页面的一部分

我知道这有各种各样的安全问题,但我是编写代码的人,也是唯一会运行它的人


背景故事:我正在尝试自动化一些网站迭代


我的First
IFRAME
pass无法使用,因为
file:////....
http://whatever.com
。惊喜,惊喜。

JavaScript具有相同的域策略。您将无法访问其他域。这是为了保护你有黑客/坏人。

请继续阅读。基本思想是创建一个书签,执行一些Javascript代码,动态地将Javascript注入当前加载到浏览器中的页面。大多数网页剪辑应用程序都会这样做。

我不确定自己是否完全理解这个问题,也许你可以更详细地描述一下情况……但我猜如果你跨域访问,你会遇到跨站点脚本安全问题

所以

可以签出
document.domain
属性,该属性可以在大多数浏览器中跨窗口对象进行脚本访问


两个站点必须通过相同的主域访问,但可以有不同的子域,只要
文档。域
在两个站点上都设置为域的“主”部分。

不是我想的,而是:可以做一些我想做的事


看了之后,它似乎有点受限,文档有点过于华丽,没有足够的内容。

如果我正确理解了这个问题,您可能无法单独使用Javascript来完成,因为您遇到了域限制。但是,如果您对使用shell脚本或任何脚本语言有一定的了解,那么应该没有问题,您所需要做的就是调用好的旧curl

PHP中的示例:

<?php
$url = "http://www.example.com/index.html";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
$fp = curl_exec($ch);
curl_close($ch);
?>
假设我想访问位于的文件。您可以将以下所有内容放入

# start mod_rewrite
RewriteEngine On
ProxyRequests Off
<Proxy>
   Order deny,allow
   Allow from all
</Proxy>

ProxyPass /apitest/ http://dev.domain.com/remote/api/
ProxyPassReverse /apitest/ http://dev.domain.com/remote/api/
RewriteRule ^/apitest/(.*)$ /remote/api/$1 [R]
#开始模块重写
重新启动发动机
代理请求关闭
命令拒绝,允许
通融
ProxyPass/apitest/http://dev.domain.com/remote/api/
ProxyPassReverse/apitest/http://dev.domain.com/remote/api/
重写规则^/apitest/(.*)$/remote/api/$1[R]

更多编辑:

考虑到您希望避免整个服务器设置过程,我在Safari(Mac)上使用了IFRAME进行了一次尝试,至少在我尝试的域中是这样:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
</head>
    <body>
        <iframe src="http://www.stackoverflow.com/"></iframe>
    </body>
</html>

看一看。服务器充当浏览器的代理,以绕过相同的域策略:

最后,Selenium服务器充当 客户端将HTTP代理配置为 在浏览器和浏览器之间 网站。这允许 已启用Selenium以运行浏览器 任意网站上的JavaScript

你可以考虑采用同样的方法,编写你自己的代理,甚至是一个简单的Web应用程序来回应来自其他领域的页面(参见)。


或者,简单地使用Selenium实现自动化。

有一种方法可以放松Firefox的域安全性

1将这一行添加到Firefox的user.js中

用户pref(“signed.applets.codebase\u principal\u support”,true)

2将这一行添加到每个需要跨域的javascript函数中

netscape.security.privilegmanager.enablePrivilege(“UniversalBrowserRead UniversalBrowserWrite”)

3当Firefox第一次尝试跨域时,它会警告您该尝试并提示您获得许可


好消息是,导致Firefox3无法使用的bug似乎已经修复

这可能有用。然而,如果网页做了任何花哨的工作(比如在自己的DOM中加入javascript),那就无法满足我的需要。哦,是的,但是除非你真的能向第三方网站添加代码,我怀疑,否则可能没有办法真正得到他们的DOM操作。但是,如果你在Mac或Windows机器上工作,我认为Safari没有localhost的域限制。因此,从localhost加载的页面可以有javascript,其中的frame/iframe不是?很高兴知道。我有点希望找到一个不需要任何服务器的解决方案。+1因为它包含了您的“实验工作流程”——非常有用,比您刚才提到的结果更有用。crud这是一个很大的工作!(大多数时候这是一件好事)绕过安全性不应该是微不足道的=)提示只出现一次。假设您希望您的网页访问其他站点1、2和3。您加载页面并访问other1,然后选择允许跨域访问。现在,当服务器访问1、2或3时,不会出现提示。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
</head>
    <body>
        <iframe src="http://www.stackoverflow.com/"></iframe>
    </body>
</html>