无法关闭应用程序浏览器窗口

2023-12-12

我可以打开我的窗口,并在其中执行很多操作,例如通过 Linkedin 或 Facebook 登录。但我无法关闭它以返回我的应用程序。

1/ 我尝试捕获事件来跟踪 url 并在 url 包含特定关键字时关闭窗口。但该事件从未被触发。我从来没有任何警觉。

    var ref = window.open(url, '_blank', 'location=no');

    ref.addEventListener('loadstart', function(event)
    {
        alert(event.url);
    });

    ref.addEventListener('loadstop', function(event) 
    {
        alert(event.url);
    });

2/ 所以我试图找到一种方法,每 n 秒从第一个窗口检查 ref.location.url 。但 ref.location.url 不存在。我没有找到从父窗口访问应用内当前 url 的方法。

3/ 我想到给 inapp 窗口命名。但是 inappbrowser 插件不允许为要打开的窗口命名。所以父窗口也无法以这种方式检查子窗口的 url。

4/ 我试图要求应用程序内的子窗口关闭:cordova 不希望 javascript 关闭当前窗口。

 self.close();  => cannot
 window.close(); => cannot

5/我尝试恢复到 cordova.js 2.9.0-0-g83dc4bd ,但效果不佳。

因此,我可以在我的应用程序中打开一个弹出窗口并使用第三方 Oauth,但随后我被困在这个弹出窗口中,并且无法返回到我的应用程序。

我检查了几乎所有我能在互联网上找到的东西,但我现在完全不知道该怎么做。

我使用 cordova.js 3.5 Android build ,并安装 inappbrowser

cordova plugin add org.apache.cordova.inappbrowser

一切都是标准的,cordova.js 已正确加载,并且我可以在日志中看到 InappBrowser 在调用时已正确使用。

  08-08 16:20:20.594: D/InAppBrowser(8496): target = _blank

呃……帮忙?

:)


我可以找到解决这个问题的方法。这很奇怪而且有偏见。但据我所知,我并不是唯一一个,我在这里写下我的解决方案以及解决该错误的方法。

首先,我添加了另一个监听器:

ref.addEventListener('exit', function(event) 
{
    if (debug) alert('exit');
});

然后,我使用了注入脚本功能,每 5 秒调用一次;

function  getStateSecondWindow()
{
    ref.executeScript(
        {code: "localStorage.getItem('loginOauth')"},
        function(data)
        {
            alert(data);
        }
    );
}

setInterval(getStateSecondWindow, 5000);

在那个阶段,我可以在日志中看到一些奇怪的东西:对 getStateSecondWindow 的第一次调用被阻止。但后来/一切/开始发挥作用。我突然让所有事件侦听器正常工作。就好像我在某个地方遇到了堵塞,而executeScript() 就解除了所有堵塞。

这个解决方案适用于我的 4 个项目。他们每个人的行为都是一样的。

万一事件再次出现问题,我使用双系统检查我的第二页,并找到一种在正确的时刻关闭它的方法:在第二页中,我使用本地存储来设置我的 var 的值: localStorage.setItem("loginOauth", '确定');

在我的第一页中,我使用执行脚本来读取本地存储:

function getStateSecondWindow() {
        ref.executeScript(
            {code: "localStorage.getItem('loginOauth')"},
            function(data)
            {
                if (data=='OK')
                {
                    //do what I need to do
                    ref.close();
                } 
            }
        );

有了这个系统,我就不再依赖于(有时不是)触发事件。即使 inappBrowser 窗口中的页面来自另一台服务器,它也可以工作:由于在第二个窗口中解释了 javascript,因此我们位于原始 localStorage 所在的同一域中(没有交叉浏览问题)。

所以这就是我如何认为 inAppBroswer 不触发事件并找到一种在需要时关闭第二个窗口的方法。希望能帮助到你 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法关闭应用程序浏览器窗口 的相关文章

随机推荐

  • Flexbox 内的图像高度在 Chrome 中不起作用

    我有一个div using flexbox将其项目居中 里面这个div我有 3 个元素 其中之一是图像 div div div img src alt div div div container1 and container2有自己的身高
  • 尝试遮盖图像周围的圆圈不起作用

    我有一个图像 我试图在周围遮盖一个圆圈 使图像看起来是圆形的 这有点有效 但圆圈在顶部和底部达到一个点 profileImageView layer cornerRadius profileImageView frame size widt
  • Scala 案例类继承

    我有一个基于 Squeryl 的应用程序 我将模型定义为案例类 主要是因为我发现复制方法很方便 我有两个严格相关的模型 字段是相同的 很多操作是共同的 并且要存储在同一个DB表中 But有些行为仅在两种情况之一中有意义 或者在两种情况下都有
  • 使用 mlflow 提供用于评分的自定义 Python 模型

    我使用带有 mlflow 的 ML 软件生成的 Python 代码来读取数据帧 执行一些表操作并输出数据帧 我能够成功运行代码并将新数据帧保存为工件 但是 我无法使用 log model 记录模型 因为它不是我们训练和拟合的 LR 或分类器
  • 使用WindowManager添加View,但可以按回键

    我使用 WindowManager 添加了一个视图 它正确地显示了我想做的事情 但我有一个问题 这就是问题 返回键按下不会影响 Android 组件 如 Activity 我想要的是我添加的视图可以聚焦 可以单击视图的内部按钮 仅当单击视图
  • 有没有办法在批处理文件中拥有多种字体、文本大小等?

    正如标题所说 我不知道是否有任何可能的方法来做这样的事情 批处理文件中的粗体 斜体 字体 文本大小 以及是否可以在同一文件中使用它们的不同值 这可能是不可能的 但如果是的话 有人可以告诉我怎么做吗 注意 我不想讨论属性或其他什么 我的意思是
  • 创建初始数据库时访问被拒绝 - 如何授予正确的访问权限?

    我正在heroku上使用mysql创建一个新项目 他们有一个名为JawsDB的插件 它为我提供了mysql主机 用户名 密码 更新 我也尝试过使用他们的其他 mysql 插件 ClearDB 并且我有完全相同的问题 我可以像这样连接到数据库
  • 无法为 python 安装 pandas

    我正在尝试为 python 安装 pandas 但我不断收到很长的错误消息 所以我尝试了以下方法 卸载并重新安装 python 版本 3 10 0 通过命令提示符导航到目录来安装 pandas C Users 用户名 AppData Loc
  • 将特定字符串值映射到 matplotlib.pyplot.imshow() 中的特定颜色

    我有一个pandas dataframe看起来像这样 columns 0 1 2 3 4 5 A A A A B B B B B C C D D D E E F F 我想用它来绘制pyplot imshow 指定以下颜色图 color di
  • 如何从 datagridview 创建主详细信息

    这段代码插入数据库 private void btnSave Click object sender EventArgs e byte imageBt null FileStream fstream new FileStream this
  • SQLite 条件插入或替换

    我正在尝试将记录插入或更新到 sqlite 数据库中 并且仅在新值大于旧值时才更新该值 架构是 CREATE table IF NOT EXISTS SearchTable Owner INTEGER PRIMARY KEY Generat
  • 使用 jQuery 进行简单的屏幕抓取

    我一直在考虑使用 jQuery 使用简单的屏幕抓取器的想法 我想知道以下是否可行 我有简单的 HTML 页面 并且正在尝试 如果可能的话 从另一个页面获取所有列表项的内容 如下所示 主页
  • 计算字符串的所有可能的组合,并进行扭曲

    我试图允许用户在文本框中输入文本 并让程序生成所有可能的组合 但最少 3 个字符和最多 6 个字符除外 我不需要像 as 这样无用的单词 a i to 等弄乱了我的数组 我还将根据字典检查每个组合 以确保它是一个真实的单词 我已经完成了字典
  • 计算csv文件中python中的特定出现次数

    我有一个包含 4 列的 csv 文件 标签 用户 质量 Cluster id 使用 python 我想执行以下操作 对于每个 cluster id 从 1 到 500 我想查看每个用户的好标签和坏标签的数量 从质量列获得 有超过6000名用
  • Android studio getSlotFromBufferLocked:未知缓冲区错误

    我想制作一个简单的登录和注册应用程序 以便用户可以创建一个帐户 姓名 用户名 密码 我使用 WAMP 和 MYSQL 数据库来存储帐户 当我在注册表单上填写用户信息并单击 注册 时 出现以下错误 09 14 09 30 39 864 262
  • 是否使用了 static constexpr 变量 odr?

    给出下面的代码是Foo FOO1是否使用 ODR include
  • 使用 Algolia React-instantsearch 和 React-Native

    我正在尝试获取新的 Algolia反应即时搜索使用react native的组件 我一直在关注guide我完全被困住了 基本上 每当我尝试添加我的
  • 可以查看源代码或反编译 XLL Excel 添加

    是否可以在没有原始源代码的情况下查看 XLL Excel 插件的源代码 我猜测这个 XLL 是用 C 编写的 但不确定 IE 可以使用 dotPeek 反编译的 NET DLL 或者可以通过 Developer gt Visual Basi
  • 从 Access 表单调用 SQL Server 函数

    我正在寻找在 Access 前端使用 SQL Server 函数的正确方法 使用它的一种方式相当简单 只需调用函数 使用括号即可 准备就绪 但我一直坚持另一个案子 如果有两个独立的函数 第一个函数用于 编码 第二个函数用于 解码 数据 那会
  • 无法关闭应用程序浏览器窗口

    我可以打开我的窗口 并在其中执行很多操作 例如通过 Linkedin 或 Facebook 登录 但我无法关闭它以返回我的应用程序 1 我尝试捕获事件来跟踪 url 并在 url 包含特定关键字时关闭窗口 但该事件从未被触发 我从来没有任何