如何在子窗口内使用父级的jquery

时间:2017-06-09 19:29:16

标签: javascript jquery

如果查看引用链接,它有一个iframe访问其jquery的父引用。如果,而不是iframe,它是一个子窗口,这可能是同样的事情吗?

P.S。
尽管语法错误的原因不明,但如果我继续执行错误,则单击处理程序仍可正常工作吗?

语法错误
return window.opener.$调用$('#Button1').时,我收到了非描述性语法错误,因此,我没有收到警报。

父窗口

<html>
<body>

    <input id="Parent_Button1" type="button" value="Pop out window" />

    <script>
        window.onload = function () {
            $('#Parent_Button1').on('click', function () {
                window.open('pop-out-win.aspx', '', 'width=400,height=300');
            });
        }
    </script>
</body>
</html>

子窗口

<input id="Button1" type="button" value="push me" />

<script>
    window.onload = function () {
        if (typeof (jQuery) == "undefined") {
            var iframeBody = document.getElementsByTagName("body")[0];
            var jQuery = function (selector) { return window.opener.$(selector, iframeBody); };
            var $ = jQuery;

            var btn1 = $('#Button1');

            btn1.on('click', function () {
                alert('achievement unlocked!')
            });
        }
    }
</script>

参考
https://stackoverflow.com/a/10950158/139698

1 个答案:

答案 0 :(得分:0)

我没有解决浏览器兼容性,可读性等问题,但是这样:

public static String ReadJobParamDefault(jobName, String parameter) {
    def job = Hudson.instance.getJob(jobName)
    String ret = null;
    if (job != null && parameter != null  && parameter.trim().length() > 0) {
        job.getProperties().values().each {
            if(it instanceof hudson.model.ParametersDefinitionProperty) {
                if (it.getParameterDefinition(parameter) != null) {
                    ret = it.getParameterDefinition(parameter).
                        getDefaultParameterValue().getValue();
                }
            }
        }
    }
    return ret;
}

这是以上可读形式的脚本标记的内容:

<body>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  <script>
    function myFunction() {
      var childWindow = window.open("", "childWindow", "width=200,height=100");
      var script = childWindow.document.createElement("script");
      script.innerHTML = 'if (typeof(jQuery) == "undefined") { window.jQuery = function(selector) { return window.opener.jQuery(selector, document);};jQuery = window.opener.$.extend(jQuery,window.opener.$);window.$ = jQuery;var msg = "Created with jQuery!";$("body").append(\'<button onclick="alert(msg)">Text</button>\');}';
      childWindow.document.getElementsByTagName("head")[0].appendChild(script);
    }

  </script>
  <p>Click to test child window jQuery injection.</p>

  <button onclick="myFunction()">Try it</button>
</body>

工作Fiddle示例