Используйте easyXDM для изменения содержимого страницы провайдера. - PullRequest
1 голос
/ 13 января 2012

Я пытаюсь использовать библиотеку javascript easyXDM для достижения междоменного взлома.

Некоторые сведения о easyXDM. У нас две роли:

  1. провайдер, который предоставляет функцию, вызываемую другими
  2. потребитель, который вызывает функцию, предоставленную провайдером.

Требование таково:

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 и сталкивался с этой проблемой?

PS: easyXDM здесь не похоже на тег. Пожалуйста, добавьте это для меня, если вы согласны, что это заслуживает.

1 Ответ

4 голосов
/ 13 ноября 2012

Я столкнулся с той же проблемой, и проблема заключалась в том, что я не понимал, как работает функциональность RPC easyXDM.

Проблема для меня заключалась в том, что я добавлял дочерний iframe к родительскому и затем вызывалeasyXDM.Rpc () с URL-адресом iframe, который я добавил на страницу.Когда я отправлял сообщение от родителя к ребенку, ребенок получал сообщение очень хорошо (и записывал в журнал правильное сообщение), но я не мог изменить никакого локального содержимого или глобальных переменных в дочернем iframe.Чего я не понял, так это того, что когда в родительском объекте создается новый RPC-клиент, инструмент автоматически создает iframe.Я думал, что это будет просто использовать iframe, который я нарисовал на странице.Поэтому я регистрировался из одного iframe (который по умолчанию закрашен за пределами экрана) и взаимодействовал с iframe, который не был подключен к вызову RPC.

Чтобы устранить проблему, я удалил добавленный iframeна страницу и использовали свойство «props» конфигурации RPC, чтобы сделать iframe видимым на экране.Как только я это сделал, все работало хорошо.

...