【问题标题】:Read localStorage from InAppBrowser从 InAppBrowser 读取 localStorage
【发布时间】:2019-06-21 07:36:56
【问题描述】:

在我正在编写的应用程序中,有两种情况:

  1. 用户用各种信息填写某种表格的一些页面(各种页面)

  2. 在 Internet 上显示网页而不是本地页面的 inAppBrowser 实例

在“场景1”中,输入数据与“localStorage.setItem”一起存储在localStorage中,

一个例子是:

    var keywords = document.getElementById("keywords").value;

    localStorage.setItem("keywords", keywords);

我可以在每个页面中正确获取和显示应用程序中的值

    var keyWord = localStorage.getItem( 'keywords' );

    alert( keyWord );

我想要实现的是能够从 localStorage 中读取值并在“场景 2”中使用它。

说明:我希望能够在 executeScript 内部访问和读取从 inAppBrowser 实例收集的“关键字”,以传递一些变量。

有可能吗?有什么想法吗?

谢谢,

咪咪

我已经尝试过使用 postmessage,但它看起来以相反的方式工作(inAppBrowser -> 应用程序)

【问题讨论】:

    标签: javascript cordova variables cordova-plugins inappbrowser


    【解决方案1】:

    是的,你需要使用 executeScript :

    let test ;
    test.executeScript(
    {
    code: "let keywords = document.getElementById('keywords').value;
    
    localStorage.setItem('keywords', keywords);"
    
    }, function()
    {
    let k = localStorage.getItem( 'keywords' );
    
    alert( k );
    });
    

    如果下面的方法不起作用,请尝试使用这个:

    在应用浏览器中:

    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
    var eventer = window[eventMethod];
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    
    // Listen to message from child window
    eventer(messageEvent,function(e) {
    console.log('parent received message!:  ',e.data);
    

    在cordova的index.html中:

    parent.postMessage("test message","*");
    

    【讨论】:

    • 谢谢 Melvita,但我担心不幸的是这个解决方案无法应用于我的设置。输入表单和 inAppBrowser 实例位于两个不同的页面上,只有第二个页面(带有 inAppBrowser 的页面) ) 有“executeScript”。更准确地说,我需要的是从父 webview ( app ) 和 child ( app part with inAppBrowser ) 传递一些值。希望这有助于更好地了解情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2013-08-15
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多