从创建的<iframe>中创建的<script>调用回调

时间:2018-02-27 14:17:24

标签: javascript

我有一个js代码应该创建一个新的 iframe ,然后使用代码创建一个新的脚本并将创建的脚本插入创建 iframe

&#xA;&#xA;

一切正常,除了回调,它在main的页面js中定义,我应该从插入的脚本,因为它未在创建的脚本中定义。

&#xA;&#xA;

我的代码如下:

&#xA;&#xA;

&#xD;&#xA;
&#xD;&#xA;
 (function(){&#xD;&#xA; function makeIframe(adElement,callback){&#xD;&#xA; var iframe = document.createElement('iframe');&#xD;&#xA; iframe.appendChild(createScriptTag());&#xD;&#xA;&#xD;&#xA; adElement.appendChild(iframe);& #xD;&#xA; adElement.parentNode.insertBefore(iframe,adElement);&#xD;&#xA;&#xD;&#xA; function createScriptTag(){&#xD;&#xA; var scriptTag = document.createElement('script');&#xD;&#xA; scriptTag.innerHTML = getFunctionBodyAsString(innerCode);&#xD;&#xA; return scriptTag;&#xD;&#xA;}&#xD; &#xA;&#xD;&#xA; function innerCode(){&#xD;&#xA; callback();&#xD;&#xA;}&#xD;&#xA;&#xD; &#xA;函数getFunctionBodyAsString(有趣){&#的xD;&#XA; return fun.toString()。match(/ function [^ {] + \ {([\ s \ S] *)\} $ /)[1];&#xD;&#xA; }&#的xD;&#XA; }&#的xD;&#XA;&#的xD;&#XA; makeIframe(document.getElementById('sth-id'),function(){&#xD;&#xA; alert(“Works!”)&#xD;&#xA;});&#xD;&#xA ;&#xD;&#xA;}());  
&#xD;&#xA;
 &lt;!DOCTYPE html&gt;&#xD;&#xA;&lt; html&gt;&#xD;&#xA; &LT;身体GT;&#的xD;&#XA; &lt; div id =“sth-id”&gt;&lt; / div&gt;&#xD;&#xA; &lt; script src =“test.js”&gt;&lt; / script&gt;&#xD;&#xA; &LT; / BODY&GT;&#的xD;&#XA;&LT; / HTML&GT;  
&#的xD;&#XA;
&#的xD;&#XA;
&#xD;&#xA;

&#xA;&#xA;

我的问题是,如何从creted 脚本中调用回调函数在创建的 iframe 中?

&#XA;&#XA;

PS。我对js不是很有经验,任何提出代码的建议都是有希望的:)

&#xA;&#xA;

更新1:

&# xA;&#xA;

我可以在js 脚本(test.js)中定义我的回调函数的唯一地方,也是我应该从这个地方调用函数(例如 makeIframe ),它运行所有其他逻辑。

&#XA;

1 个答案:

答案 0 :(得分:0)

因为您要避免加载外部脚本,所以您可以在HTML标记中包含所需的JS代码,并使用DOM API检索它。

&#13;
&#13;
<!DOCTYPE html>
<html>

<body>
  <div id="sth-id"></div>
  <script src="test.js"></script>
  <script type="text" id="adScript">
    //doWhatever alert('it works')
  </script>
</body>

</html>
&#13;
<script>
        function Sendmeaway() {
            var item_i = document.getElementById("item_select").value;

            if (item_i == "Initial_Value") {
                alert("Please Select the Correct Option or Enter the Comment");
            } else {
                $.post("./back_p/add_change_req.php", {
                        item : item_i
                    },
                    function(data, textStatus) {
                        alert("Response from server: " + data);
                        document.getElementById("item_select").selectedIndex = 0;
                        location.reload();
                    });
            }

        };
    </script>
&#13;
&#13;
&#13;