2015-05-05 2 views
2

Я пытаюсь запустить скрипт на веб-странице, которая должна быть выполнена в . Прямо сейчас я могу вызвать функцию, установленную в . У меня просто возникают проблемы с запуском скрипта в контексте .Запустить Javascript в контексте iFrame

Вот как я запустить функцию, установленную в

$('#iframe').get(0).contentWindow.performSearch(); 

Теперь вместо вызова функции preformSearch, я хочу, чтобы запустить сценарий - для этого примера, это скрипт ...

console.log('worked!'); 

Мой фактический сценарий большой, поэтому я не стану его здесь - ради этого вопроса.

Итак, есть ли способ запустить этот скрипт через контекст ? Например, моя первая догадка будет/была ..

$('#iframe').get(0).contentWindow.function(){ 
console.log('worked!'); 
} 

Я никогда не запутался с запущенными функциями через что-то, как до того, хотя, так что я в тупике.

Спасибо за любую помощь заранее!

ПРИМЕЧАНИЕ Я использую NW.js (Node-Webkit), чтобы удалить все ограничения .

ПРИМЕЧАНИЕ v2 Функция preformSearch() была всего лишь отражением того, как я вызываю функции в кадре.

+0

ли функция с помощью JQuery? Если это действительно не может напрямую привязать функцию к новому окну, или 'iframeWindow.jQuery' будет неопределенным. Но можно легко передать «окно» в качестве функции функции .... показать образец самой функции – charlietfl

+0

У вас должен быть 'performSearch' как функция на странице, из которой исхэм приходит, чтобы работать. – PHPglue

+0

Вы должны иметь 'performSearch' как функцию на странице, из которой искробедренный код исходит из этого для работы. – PHPglue

ответ

0

Вы можете попробовать и использовать сообщения Механизма , что означает, что на родительском фрейме вы можете отправить сообщение с

var win =$("#iframe").contentWindow; 
    win.postMessage({ messageType: "predefinedMessage", features: data }, '*'); 

и чем в IFRAME вы можете получить сообщение

function FrameCommunicator(attachManager) { 
    var mfilesFrame; 
    function _actOnMessage(data) { 
     if (data.messageType === "predefinedMessage") { 
     //perform here what you need 
     } 
    } 

    window.addEventListener("message", function (e) { 
     var data = e.data; 
     mfilesFrame = e.source; 
     _actOnMessage(data); 
    }, false); 

} 

теперь дело в том, что iframe и родительский кадр могут иметь один и тот же код, если они ссылаются на удаленно.

Другим способом было бы просто отправить содержание сообщения, как JS и запустить его с Eval, но это рискованно, плохая практика и Lotsa другие вещи :)

+0

Красивый ответ, но, к сожалению, я не могу делать то, что хочу. У меня нет доступа к коду iFrame. –

+0

'onmessage' не поддерживается IE. Поскольку большинство браузеров на рынке IE, к сожалению, это не очень хорошая идея. – PHPglue

+0

Я использую node-webkit, поэтому, пока он работает в Chrome, это все, что мне нужно. –

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