Я боролся с проблемой уже несколько часов, и я был бы признателен либо за помощь в достижении моей цели, либо за подтверждение того, что то, что я пытаюсь сделать, на самом деле невозможно.
У меня есть веб-приложение, которое берет выбранный текст (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. Может быть, это не имеет значения, но, возможно, это имеет значение.