2017-01-28 5 views
28

Я добавил zooming="true" внутри тега, но когда страница загружена, я не могу увеличить, чтобы увеличить или уменьшить представление. Я также установил webkitallowfullscreen mozallowfullscreen allowfullscreen, чтобы масштабировать страницу, чтобы соответствовать экрану устройства, но ничего не изменилось, и страница все еще вырезана.Включить щепотку для увеличения внутри iframe - Ionic 2 AngularJS 2

Чтобы объяснить эту концепцию немного лучше, я беру, например, Android родные приложения. Теперь, если вы хотите загрузить страницу из Интернета, вы используете WebView, и результат в точности соответствует использованию iframe на Ionic. Но на андроид вещей становится проще относительно настройки:

webview.getSettings().setBuiltInZoomControls(true); 

для того, чтобы щепотка к зуму и

webview.getSettings().setUseWideViewPort(true); 

, чтобы соответствовать и масштабировать веб-страницу, в зависимости от размера (мобильного) экрана. Теперь, используя 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 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); 
    } 
} 

Edit 2

После добавления id="myframe" внутри Я также пробовал функцию 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%"; 
} 
+1

Как вы думаете, что это поведение только ионное или из-за сам фрейм, вы можете создать простое приложение, чтобы увидеть, что является источником проблемы. Также, если вы поделитесь им, это может быть более полезно для поиска решения. –

+0

Я не знаю, является ли это либо ограничением Ionic, либо ограничением самого iframe. Я также пробовал с другими URL-адресами, но страница обрезается в любом случае – Pier

ответ

6

Я думаю, что это невозможно сделать в IFrame, поскольку это будет недостатком безопасности. что вы в основном делаете, это попытка получить доступ к веб-странице из вашего мобильного гибридного приложения (приложение Ionic в вашем случае). он не должен позволять вам запускать javascript на этой веб-странице, обходной путь для него будет отключать веб-безопасность в этом браузере или в вашем случае webview (не уверен, как это сделать на мобильных устройствах, но это ручная настройка браузера, поэтому не будет работать в ваш сценарий). более

объяснения на этом посте SecurityError: Blocked a frame with origin from accessing a cross-origin frame

+0

Итак, в нескольких словах вы говорите, что я не могу ничего сделать, чтобы настроить представление или хотя бы немного уменьшить масштаб, не так ли? Это проблема для меня, потому что мой клиент хочет загрузить свою веб-страницу, где он спонсировал рекламу, и это приводит к плохим рейтингам, потому что пользователю приходится прокручивать экран назад и вперед, чтобы читать каждую строку – Pier

+0

да. но почему бы вам не создать ссылку для открытия в браузере по умолчанию. – Ankit

+0

Потому что я уже делал это в версии Android приложения, созданного мной в Android Studio, и получил плохие оценки, так как пользователю было необходимо открыть браузер, чтобы загрузить новости, задаваясь вопросом, какой целью было приложение, если бы он для загрузки браузера каждый раз. Они могут напрямую перейти на свой сайт, не используя приложение. Когда на Android мне удалось загрузить новости в приложении, никто больше не жаловался – Pier

7

Вам нужно будет отслеживать жест и применить изменение масштаба к IFRAME как этот document.getElementByTagName('iframe').contentWindow.document.body.style = 'zoom:50%';

Здесь трансфокатора установлен в 50%, но это можно добавить динамически с использованием значений события жестов.

+0

Я отредактировал мой вопрос, так что вы увидите, что я сделал – Pier

+0

Пожалуйста, помогите мне? Никто не делает – Pier

Смежные вопросы