2009-03-13 3 views
0

Я уже несколько часов борюсь с проблемой, и я был бы признателен за любую помощь в достижении моей цели или подтверждение того, что то, что я пытаюсь сделать, на самом деле невозможно ,Получение выделенного текста с использованием скриптов с поперечной рамкой

У меня есть webapp, который принимает выделенный текст (document.getSelection()) в качестве входных данных с произвольной веб-страницы. Хотя можно было бы легко использовать букмарклет для подобных скриптов, лучше всего для конечного пользователя, если я смогу выполнить это с помощью iframe.

родительском фрейме мой сайт с помощью этого сценария:

$('#frame').load(function() 
{ 
    // this event won't be triggered 
    $(window).mouseup(function(){ 
     doStuff(window.getSelection()); 
    }); 

    // this will throw a security error 
    $(window.frames[0].document).mouseup(function(){ 
     doStuff(window.frames[0].document.getSelection()); 
    });     
}); 

Произвольный сайт находится в дочернем фрейме. Если дочерний документ из моего домена, доступ запрещен по соображениям безопасности XSS. Я попробовал несколько вариантов и попыток взлома, включая установку iframe src в мой домен с третьим URL-адресом в качестве аргумента, а затем перенаправление на сторонний URL-адрес. В каком-то смысле я рад, что это не сработало (потому что если бы это произошло, то безопасность XSS все равно осталась бы длинной ...)

Другой вариант - загрузить стороннюю страницу и выполнить это из моего домена, как прокси-сервер, но я уже столкнулся с множеством проблем с относительными путями к файлам, которые иногда легко сделать абсолютными, но иногда ошибочными (например, когда файлы получают доступ через скрипт) ,

Я пришел к выводу, что мне просто не повезло. Возможно, важным отличием для моего случая является то, что я хочу только получить доступ к методу .getSelection() для ребенка. Не нужно иметь доступ к файлам cookie или нажатиям клавиш или взаимодействовать с DOM. Может быть, это не имеет значения, но, возможно, так и есть.

ответ

0

Вы можете попробовать прокси-метод, но вставьте тег base, который указывает на исходный домен. После этого следует позаботиться о путях.

Я бы не стал полагаться на любые хакеры XSS, даже если бы вы их нашли - они, скорее всего, будут исправлены и, скорее всего, не будут crossbrowser.

0

Одна из возможностей заключается в том, чтобы написать документ iframe с текстом из XHR или использовать функцию jQuery load(), это работает только в том случае, если в iframe нет навигации.

0

Я не полностью читал ваш ответ :-), но, возможно, у меня есть решение, оно включает передачу данных между родительским и дочерним кадрами в обоих направлениях.

Вы можете ЗАПИСАТЬ (а НЕ ПРОЧТИТЕ) хэш (хеш - http://url#HASH_PART) родителя от ребенка. Итак, на родительском iframe просто установите интервал, чтобы проверить значение, скажем каждые 50 мс.

function checkHash() { 
    if (window.location.hash == "#something") { 
     // my child frame set this value using: 
     //parent.window.location.hash = "something"; 
     doSomething(); 
    } 
} 

Для получения более подробной информации, и, возможно, делает родителя к ребенку связи, то полный текст статьи объясняя это (также имеет демонстрационную ссылку) можно найти here.

 Смежные вопросы

  • Нет связанных вопросов^_^