[解決済み] AngularJSでiframeのsrc属性を変数から設定する方法
質問
を設定しようとしています。
src
属性を変数から取得しているのですが、うまくいきません...。
マークアップのことです。
<div class="col-xs-12" ng-controller="AppCtrl">
<ul class="">
<li ng-repeat="project in projects">
<a ng-click="setProject(project.id)" href="">{{project.url}}</a>
</li>
</ul>
<iframe ng-src="{{trustSrc(currentProject.url)}}">
Something wrong...
</iframe>
</div>
controllers/app.jsを参照してください。
function AppCtrl ($scope) {
$scope.projects = {
1 : {
"id" : 1,
"name" : "Mela Sarkar",
"url" : "http://blabla.com",
"description" : "A professional portfolio site for McGill University professor Mela Sarkar."
},
2 : {
"id" : 2,
"name" : "Good Watching",
"url" : "http://goodwatching.com",
"description" : "Weekend experiment to help my mom decide what to watch."
}
};
$scope.setProject = function (id) {
$scope.currentProject = $scope.projects[id];
console.log( $scope.currentProject );
}
}
このコードでは、何もiframeの
src
属性を使用します。空白になるだけです。
アップデート1:
を注入してみました。
$sce
の依存性をAppCtrlに追加し、$sce.trustUrl()がエラーを投げずに動作するようになりました。しかし、それは
TrustedValueHolderType
これは、実際のURLを挿入するためにどのように使用したらよいかわかりません。属性内の中括弧の中で $sce.trustUrl() を使用しても、同じ型が返されます。
src="{{trustUrl(currentProjectUrl))}}"
または、コントローラ内でcurrentProjectUrlの値を設定する際に行う場合です。両方で試したこともあります。
更新2: .toString()を使ってtrustedUrlHolderからurlを返す方法がわかったのですが、それをsrc属性に渡そうとするとセキュリティ警告が出ます。
アップデート3: コントローラでtrustAsResourceUrl()を使い、それをng-src属性内で使う変数に渡すとうまくいくのですが。
$scope.setProject = function (id) {
$scope.currentProject = $scope.projects[id];
$scope.currentProjectUrl = $sce.trustAsResourceUrl($scope.currentProject.url);
console.log( $scope.currentProject );
console.log( $scope.currentProjectUrl );
}
私の問題はこれで解決したようです、理由はよく分かりませんが。
解決方法は?
抜粋を見る限りでは、関数
trustSrc
から
trustSrc(currentProject.url)
はコントローラで定義されていません。
を注入する必要があります。
$sce
サービス
をコントローラに、そして
trustAsResourceUrl
は
url
そこに
コントローラで
function AppCtrl($scope, $sce) {
// ...
$scope.setProject = function (id) {
$scope.currentProject = $scope.projects[id];
$scope.currentProjectUrl = $sce.trustAsResourceUrl($scope.currentProject.url);
}
}
テンプレートで
<iframe ng-src="{{currentProjectUrl}}"> <!--content--> </iframe>
関連
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み] IFrameからボーダーを取り除く
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] jQueryを使用してハイパーリンクのhref属性を変更する方法
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] 入力フィールドにフォーカスを当てるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】 Uncaught Error: Invariant Violation: 解決済み】 Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object.
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。