我有变量,我认为是全局的,所以我的所有子函数必须能够获得该变量,但我得到一个引用错误,变量未声明 这是下面的代码。如果我做错了,请帮忙.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变量...
答案 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>
this.openwindow = function() {
w = window.open(location.href+"untitled.html",'TheNewpop','height=315,width=625');
w.document.close();
w.focus();
}
Some Test
<script src="windowpo.js"></script>
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>
这样你就可以使用所有文件