将JavaScript中的变量传递给open.window

时间:2017-03-16 10:43:30

标签: javascript jquery angularjs

我有变量,我认为是全局的,所以我的所有子函数必须能够获得该变量,但我得到一个引用错误,变量未声明 这是下面的代码。如果我做错了,请帮忙.Thanku

<!DOCTYPE html>
     <html>
        <head>
         <script>
            var Test1Object = 'Testing'; // This is my variable
         </script>
        <script src = 'ch.js'>
        </script>
        </head>
      <body>
        <button onclick="openwindow()">Create window</button>
      </body>
    </html>

我的Ch.js

(function(){

    alert(Test1Object)  // Here i am getting this object
   this.openwindow = function() {

    w =window.open("untitled.html",'TheNewpop','height=315,width=625');  
    w.document.write(
    "<body>"+

    "<\/body>" + 
    "<script src = \"windowpo.js\"><\/script>" // THis is where i reference my windowpo.js

    )
    w.document.close();
    w.focus();
}
 })()

我的windowpo.js

(function(){
alert(Test1Object)  // Here  there is not Test1Object (Reference error)
})();

我的问题是在我的windowp.js中如何获得我的Test1Object变量...

3 个答案:

答案 0 :(得分:1)

使用此runnable demo plnkr中的window.opener,只需在窗口中访问您的引用即可轻松完成。在您的窗口应用程序中,您可以通过window.opener.Test1Object访问它,其中window.opener包含打开它的JavaScript实例的引用。通过这种方式,您可以访问在主应用程序中配置的所有内容:

视图

<!DOCTYPE html>
<html ng-app="myApp">

<head lang="en">
  <meta charset="utf-8" />
  <title>Custom Plunker</title>
 <script type="text/javascript"> 
    var Test1Object = 'Testing';
 </script>
 <script src="main.js"></script>
</head> 
<body>
  <a onclick="openwindow()">Open Window</a>
</body>
</html>

main.js

this.openwindow = function() {
  w = window.open(location.href+"untitled.html",'TheNewpop','height=315,width=625');  
  w.document.close(); 
  w.focus();
}

unitiled.html

Some Test
<script src="windowpo.js"></script>

windowpo.js

alert(window.opener.Test1Object);

答案 1 :(得分:0)

由于大多数其他答案似乎都没有正确地阅读问题,我也会加上2美分作为答案:

代码中的主要问题是,您必须在此处执行JS执行上下文:一个用于原始页面(您显示的HTML代码),另一个用于您在Ch.js中打开的弹出窗口。一般来说,两者都不共享任何数据,变量或其他任何内容。

但是,在调用w后,您的变量window.open()中有一个窗口对象引用。您已经使用它将HTML代码注入弹出窗口。

如果你现在想要在弹出式JS上下文中使用JS变量,你可以在弹出式HTML代码中注入额外的<script>标签并在那里设置变量(错误选择,imho)或使用{{1发送数据。我为下面的postMessage()变体提供了一些示例代码:

Ch.js

postMessage()

windowpo.js

this.openwindow = function() {

  w = window.open("untitled.html",'TheNewpop','height=315,width=625');  
  w.document.write(
    "<body>"+
    "<\/body>" + 
    "<script src = \"windowpo.js\"><\/script>" // THis is where i reference my windowpo.js
    );
  w.document.close();
  w.focus();

  // wait for pupup to be ready
  window.addEventListener( 'message', function( e ){
    // send the variable
    if( e.data == 'inited' ) {
      w.postMessage( Test1Object, '*' );
    }
  })
}

有关更多信息,请参阅相应的MDN article on Window.postMessage()

答案 2 :(得分:-1)

在包含在任何文件中之前,您需要声明变量。只需在包含的文件上方创建一个脚本标记,然后在那里定义它。

<script type='text/javascript' > 
  var Test1Object = 'Testing';
</script>
<script type='text/javascript' src='js/Ch.js'></script> 
<script type='text/javascript' src='js/windowpo.js'></script>

这样你就可以使用所有文件