好的,假设我有一个网页,网页B.网页B有一个名为“test()”的功能。现在假设我有另一个网页,网页A.网页A有一个带有网页来源的iFrame B.如何从网页A执行网页B的“test()”功能?
答案 0 :(得分:1)
你不能直接'通过父页面中的任何代码控制iframe中页面的javascript。
但是,如果您能够更改这两个页面,则可以更改页面B'根据其查询字符串中的参数运行javascript。
在页面A'将iframe src设置为:
http://mydomain.com/pageb.html?func=myfunc¶m=foo¶m2=bar
然后在'页面B'像这样运行一些javascript:
function queryToLookup(query) {
var lookup= {};
var params= query.slice(1).split(/[&;]/);
for (var i= 0; i<params.length; i++) {
var ix= params[i].indexOf('=');
if (ix!==-1) {
var name= decodeURIComponent(params[i].slice(0, ix));
var value= decodeURIComponent(params[i].slice(ix+1));
if (!(name in lookup))
lookup[name]= [];
lookup[name].push(value);
}
}
return lookup;
}
function myTestFunc(p1, p2) {
alert('param 1 is ' + p1 + ' and p2 is ' + p2);
}
jQuery(document).ready(function() {
var params = queryToLookup(location.search);
switch(lookup['func'])
{
case 'myfunc': myTestFunc(params['param1'], params['param2']);
case 'otherfunc': myTestFunc('someval', params['param1']);
default: alert('No function requested');
}
});
这当然是一个非常基本的例子,但可以适应各种疯狂的东西。限制是您无法将消息真正传递回A&#39;尽管您可以&#39; (我认为)在第A页调整技术,然后调用top.location = 'pagea.html?message=foo'
(就像破帧一样)。