在我的測試中,給出了2個文件,A和B.在一個文件中,有一個iframe,iframe源是B文件。我的問題是如何修改B文件某些範圍的變量?Angularjs:調用iframe中的其他範圍
這裏是我的代碼:文檔
<html lang="en" ng-app="">
<head>
<meta charset="utf-8">
<title>Google Phone Gallery</title>
<script type='text/javascript' src="js/jquery-1.10.2.js"></script>
<script type='text/javascript' src="js/angular1.0.2.min.js"></script>
<script>
var g ;
function test($scope,$http,$compile)
{
$scope.tryget = function(){
var iframeContentWindow = $("#iframe")[0].contentWindow;
var iframeDOM = $("#iframe")[0].contentWindow.document;
var target = $(iframeDOM).find("#test2");
var iframeAngular = iframeContentWindow.angular;
var iframeScope = iframeAngular.element("#test2").scope();
iframeScope.parentcall();
iframeContentWindow.angular.element("#test2").scope().tempvalue = 66 ;
iframeScope.tempvalue = 66;
iframeContentWindow.tt = 22;
iframeScope.parentcall();
console.log(iframeScope.tempvalue);
console.log(angular.element("#cont").scope());
}
}
</script>
</head>
<body>
<div ng-controller="test">
<div id="cont" >
<button ng-click="tryget()">try</button>
</div>
</div>
<iframe src="test2.html" id="iframe"></iframe>
</body>
</html>
我的B原稿:
<!doctype html>
<html lang="en" ng-app="">
<head>
<meta charset="utf-8">
<title>Google Phone Gallery</title>
<script type='text/javascript' src="js/jquery-1.10.2.js"></script>
<script type='text/javascript' src="js/angular1.0.2.min.js"></script>
<script>
var tt =11;
function test2($scope,$http,$compile)
{
console.log("test2 controller initialize");
$scope.tempvalue=0;
$scope.parentcall = function()
{
$scope.tempvalue = 99 ;
console.log($scope.tempvalue);
console.log(tt);
}
}
</script>
</head>
<body>
<div ng-controller="test2" id="test2">
<div id="cont" >
<button ng-click="parentcall()">get script</button>
</div>
{{tempvalue}}
</div>
</body>
</html>
注:其實有一些方法來做到這一點,我覺得它像一個黑客而不是正確的方式來完成它: 這是在b文檔中創建一個按鈕,然後用angularjs ng-click綁定。之後,一個文件jQuery「觸發」點擊按鈕。
只是一個快速的筆記。請記住,除非它們位於同一個域中,否則通常無法與iFrame和父頁面進行通信。有辦法做到這一點,但你不能直接訪問它們。只是這樣你纔不會遇到這個問題:) –
是的,有相同的域和相同的項目。只是不能正確操縱這些JS對象和變量。想知道是否有人有更好的主意。 – Stupidfrog