タグ内に_zooming="true"
_を追加しましたが、ページが読み込まれると、ズームしてビューを拡大または縮小できません。また、デバイスの画面に合わせてページを拡大縮小するように_webkitallowfullscreen mozallowfullscreen allowfullscreen
_を設定しましたが、何も変更されず、ページはまだカットされています。
この概念を少しよく説明するために、たとえばAndroid
ネイティブアプリを取り上げます。ここで、Webからページをロードする場合は、WebView
を使用します。結果は、iframe
でIonic
を使用する場合とまったく同じです。しかしAndroidでは、カスタマイズに関しては物事が簡単になります:
_webview.getSettings().setBuiltInZoomControls(true);
_
ピンチツーズームを有効にし、
_webview.getSettings().setUseWideViewPort(true);
_
(モバイル)画面のサイズに応じて、Webページに合わせて拡大縮小します。現在、_Windows 10
_を使用して_native iOS apps
_を構築することは不可能なので、_cross-platform development
_に依存する必要があります。
これが私の_detail-page
_です:html
:
_<ion-content>
<iframe sandbox class="link" frameborder="0" [src]="webPage()" zooming="true" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</ion-content>
_
scss
:
_detail-page {
.scroll-content{
padding: 0px ;
}
::-webkit-scrollbar,
*::-webkit-scrollbar {
display: none;
}
iframe.link {
width: 100%;
height: 100%;
max-width: 100%;
max-height: 100%;
}
}
_
ts
:
_webPage() {
return this.sanitizer.bypassSecurityTrustResourceUrl(this.entry.getElementsByTagName('link')[0].textContent);
}
_
あなたが私を助けることができることを願っています。
編集
document.getElementsByTagName('iframe').contentWindow.document.body.style = 'zoom:50%';
を追加しましたが、TypeScriptエラーが発生します。
_TypeScript Error
Property 'contentWindow' does not exist on type 'NodeListOf<HTMLIFrameElement>'.
_
これが私の_.ts
_ファイル全体です。
_export class DetailPage {
entry:any = [];
constructor(private sanitizer: DomSanitizer, public nav: NavController, navParams:NavParams) {
console.log('run');
this.nav = nav;
this.entry = navParams.get('selectedEntry');
console.log('My entry is: "'+ this.entry.getElementsByTagName('title')[0].textContent + '"');
document.getElementsByTagName('iframe').contentWindow.document.body.style = 'zoom:50%';
}
webPage() {
return this.sanitizer.bypassSecurityTrustResourceUrl(this.entry.getElementsByTagName('link')[0].textContent);
}
}
_
編集2
_id="myframe"
_内に_<iframe>
_を追加した後、関数ngAfterViewInit()
も試しましたが、まだ変更はありません。
_ngAfterViewInit() {
var x = document.getElementById("myframe");
var y = (<HTMLIFrameElement> x).contentWindow.document;
y.body.style.zoom = "50%";
}
_
そしてこの形でも:
_ngAfterViewInit() {
var iframe:HTMLIFrameElement = <HTMLIFrameElement>document.getElementById('myframe');
var iWindow = (<HTMLIFrameElement>iframe).contentWindow.document;
iWindow.body.style.zoom = "50%";
}
_
これはセキュリティ上の欠陥となるため、IFrameでは実行できないと思います。あなたが基本的にやっているのは、モバイルハイブリッドアプリ(あなたの場合はIonicアプリ)からWebページにアクセスしようとすることです。それはあなたがそのウェブページでJavaScriptを実行することを許可してはいけません、それの回避策はそのブラウザまたはあなたの場合はウェブビューでウェブセキュリティを無効にすることです(モバイルでそれを行う方法がわからないがそれは手動のブラウザのカスタマイズであるためあなたのでは機能しませんシナリオ)。
この投稿の詳細 SecurityError:Origin with a frame from Access from cross-Origin frame
ジェスチャーを追跡し、ズームの変更を次のようにiframeに適用する必要がありますdocument.getElementByTagName('iframe').contentWindow.document.body.style = 'zoom:50%';
ここではズームは50%に設定されていますが、ジェスチャーイベント値を使用して動的に追加できます。