2015-03-13 37 views
2

是否可以在现有IFrame的src属性上执行内联JavaScript代码(执行一些逻辑并返回url的函数)?在iframe中执行内联JavaScript代码src attribut

当我尝试的代码,我得到的错误:未捕获的ReferenceError:你好没有定义

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
\t <title>title</title> 
 
\t <script type="text/javascript"> 
 
\t \t var hello = function(src1){ 
 
      // some logic goes here 
 
\t \t \t return "www.mysite.com"; 
 
\t \t } \t 
 
\t </script> 
 
</head> 
 
<body> 
 
\t 
 
\t <iframe width="400" height="400" src="javascript:hello()" > \t 
 
\t </iframe> 
 
\t 
 
</body> 
 
</html>

+1

你必须设置src属性的不同方式。 – 2015-03-13 17:05:39

+0

我知道可以获取iframe HTMLElement并动态设置其src。我正在寻找最小的方式来完成相同的任务。 – 2015-03-13 17:42:54

回答

2

你不能把内嵌JavaScript中src属性。你可以使用onload事件来做到这一点。使用下面

<!DOCTYPE html> 
<html> 
<head> 
    <title>title</title> 
    <script type="text/javascript"> 
     var hello = function(src1){ 
      // some logic goes here 
      return "mysitename.com"; 
     } 
    </script> 
</head> 
<body> 

    <iframe width="400" height="400" onload="this.src = hello()"> 
    </iframe> 

</body> 
</html> 

希望这段代码可以帮助您

+0

谢谢,这是非常接近我需要的,我需要你好来阻止加载的iframe(空白内容),直到函数hello返回一些结果(外部ajax调用)。有ondomcontentloaded监听器的iframes? – 2015-03-13 17:19:43

+0

如果要在ajax调用之后插入url,而不是在ajax的响应结果中插入document.getElementById(“iframeid”)。src =“您的URL”。它应该正常工作 – 2015-03-13 17:23:58

+0

这会导致无限循环,我认为当iframe加载它时会更改它的src并重新加载,无限触发onload。 – 2015-03-13 17:25:54

0

你可以使用document.write

<body> 
    <script type="text/javascript"> 
    document.write('<iframe width="400" height="400" src="' + hello() + '"></iframe>') 
    </script> 
</body> 
+0

虽然,我认为@Hudixt发布的解决方案可能更好。只是提供一个替代品。 – Sildoreth 2015-03-13 17:21:23

+0

不幸的是,我没有太多的iframe控制,iframes已经出现在页面上,我只能添加属性(这是我可以做的最大改变)。 – 2015-03-13 17:31:23

+0

@ user3075416您可否将此添加到未来人的原始问题中,以查看他们是否偶然发现了您的问题? – Sildoreth 2015-03-13 17:36:23

0

为hello(呼叫)是在iframe中执行(因为 '的javascript:你好()' 是IFRAME SRC) 但功能 '你好()' 声明父iframe的外窗口,其中嵌入了iframe。 您可以在调用hello()之前,在iframe src中调用parent.hello(),或者在iframe src中声明hello()的主体。下面演示了两种方法:

<script> 
    var hello = function(){ 
     alert('hello from outside the iframe'); 
    } 
</script> 

<iframe width="400" height="400" src="javascript:var hello = function(){alert('hello from inside the iframe')};hello();parent.hello()"></iframe> 

你可以看到它在这里的行动: https://fiddle.jshell.net/vtdc1qxf/3/