JavaScript - как определить, был ли выбран текст в iframe или главном окне - ошибка, когда я запускаю свой код - PullRequest
0 голосов
/ 22 октября 2011

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

Код работает нормально, если веб-страница (в которой был выделен текст) находится в главном окне, однако, если текст находится в iframe, то код вообще не может обнаружить iframe.

Javascript код -

var iframe_or_main= 'main';
var selection;
selection = document.getSelection();
if (!selection) //this means that user has selected text within an iframe (and not within main window)...
{   
    //this variable tells us that the user has selected text within an iframe... 
    //this is required when adding an element with translated text to web page...
    iframe_or_main='iframe';
    var id_of_iframe;
    id_of_iframe= getIframeWithSelection(window);
    console.log(" Content selected within an iframe- iframe id=" + id_of_iframe);
    selection = getIFrameDocument(document.getElementById(id_of_iframe)).getSelection();


}
//  return; // selection is probably in an iframe;

console.log(" Indicator - iframe or main? --" + iframe_or_main)";
console.log(" Iframe id (if applicable)=" + id_of_iframe);

Кроме того, вывод, когда я выбираю текст в iframe, показан ниже -

Indicator - iframe or main? --main
Iframe id (if applicable)=undefined

Обратите внимание, что я попытался выделить текст на веб-странице (открытой в iframe), которая принадлежит тому же домену, что и главная веб-страница. Я также попытался сделать это с той же политикой происхождения, отключенной в Google Chrome, используя параметры запуска, чтобы отключить ее. В обоих случаях я получаю тот же вывод, что и выше.

Что-то не так с моим кодом? Как мне это исправить? Обратите внимание, что я хочу, чтобы код работал в Google Chrome, хотя, если он работает в других браузерах, это будет плюсом.

1 Ответ

1 голос
/ 22 октября 2011

Вы не можете получить доступ к DOM документа, используя IFrame в качестве корня. Используйте свойство .contentWindow для доступа к окну iframe. Кроме того, около «ID кадра, если применимо» . Ваш код сломается, если у IFrame нет идентификатора. Смотрите предложение по коду внизу этого ответа.

if (!selection){   
    iframe_or_main = 'iframe';
    var iframes = document.getElementsByTagName("iframe");
    var test_selection;
    for(var i=0; i<iframes.length; i++){
        try{ //Try-catch to prevent the same-origin policy from breaking the code
            if(test_selection = iframes[i].contentWindow.document.getSelection()){
                id_of_frame = iframes[i].id;
                selection = test_selection;
                break;
            }
        }catch(e){}
    }
    console.log(" Content selected within an iframe- iframe id=" + id_of_iframe);    
}

Если идентификатор кадра не имеет значения, используйте следующий код:

if (!selection){   
    iframe_or_main = 'iframe';
    var test_selection;
    for(var i=0; i<frames.length; i++){
        try{ //Try-catch to prevent the same-origin policy from breaking the code
            if(test_selection = frames[i].document.getSelection()){
                selection = test_selection;
                break;
            }
        }catch(e){}
    } 
}

См. Также: определить идентификатор / имя фрейма, когда пользователь выбрал текст в этом фрейме - страница содержит несколько фреймов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...