我正在尝试使用easyXDM javascript库来实现一些跨域破解。
easyXDM的一些背景。我们有两个角色:
- 提供程序,它提供要由其他人调用的函数
- 使用者,它调用提供者提供的函数
要求如下:
The consumer passes the content as parameter and calls the function through RPC.
The provider receives the request and use the content to modify its page.
这里,修改其页面意味着试图修改DOM结构或DOM节点中的内容。
提供者端的代码,一旦消费者请求,它将修改其页面内容。
var provider = new easyXDM.Rpc({}, {
local: {
modifyContent: {
method: function(content){
// modify the content on my page
}
}
}
});
使用者端,它将执行RPC以要求提供者更改其页面。
var consumer = new easyXDM.Rpc({
remote: "remoteUrl"
}, {
remote: {
modifyContent: {}
}
});
//perform RPC and ask the provider to the modify its content
consumer.modifyContent("This is some content that should be used to modify your content");
除了提供者试图使用内容修改其页面时,一切都很顺利。
不会引发任何错误或警告。但页面不会像预期的那样改变。
此外,我单独运行"更改内容"代码(如在Firebug控制台或Chrome控制台中复制和粘贴并运行),它会起作用。
有人以前使用过easyXDM并遇到过这个问题吗?
附言:easyXDM
在这里似乎不是一个标签。如果你认为它值得的话,请为我添加它。
我遇到了同样的问题,问题是我不理解easyXDM的RPC功能是如何工作的。
对我来说,问题是我将子iframe添加到父iframe,然后用我添加到页面的iframe的url调用easyXDM.Rpc()。当我从父级向子级发送消息时,子级会很好地接收到消息(并在控制台中记录正确的消息),但我无法更改子级iframe中的任何本地内容或全局变量。我不明白的是,当在父级中创建新的RPC客户端时,该工具会自动创建一个iframe。我以为它会使用我在页面上画的iframe。所以我从一个iframe(默认情况下是在屏幕外绘制的)进行日志记录,并与一个没有连接到RPC调用的iframe进行交互。
为了解决这个问题,我删除了添加到页面中的iframe,并使用RPC配置的"props"属性使iframe在屏幕上可见。一旦我做到了,一切都很顺利。