作者shadowjohn (某人睡醒就发文)
看板Ajax
标题Re: [问题] 取代phoneGap InAppBrowser api的可能?
时间Fri Jun 27 22:56:34 2014
※ 引述《dream1124 (全新开始)》之铭言:
: 标题: [问题] 取代phoneGap InAppBrowser api的可能?
: 时间: Tue Jun 24 19:59:22 2014
:
: 大家好
:
: 想请问有没有可能在 phoneGap InAppBrowser 载入外部网页时,
: 抽换网页里面呼叫的 javascript html DOM api 呢?
:
: 我的需求是要让 phoneGap App 能连到 app 外部的网页系统,
: 执行像平常在桌电上的系统操作。
:
: 因为 InAppBrowser 能整合在 app 里面又有回上一页的能力,
: 所以这是我优先考虑的实作方式,我让 app 使用者点选连结之後呼叫 phoneGap 的
: window.open 引导开启 InAppBrowser。
:
: 但遇到的问题是载入的网页本身会再呼叫浏览器的 window.open,
: 用以开启像对话视窗那样的东西。
: 这让我的 InAppBrowser 改为呈现弹跳出的页面,
: 然後又回不去最初 InAppBrowser 载入的页面。
:
: 因此想请问 phoneGap 有没有办法替换 InAppBrowser 的 api 实作,
: 抽换某些 api,像是 window.open,让载入的外部网页在 app 里面能正式执行呢?
:
: 或着请问有其他方法可以让 phoneGap 载入外部给一般浏览器的网页时,
: 能正常显示与操作吗?
:
: 我知道期待开发给桌电浏览器的网页在行动装置上也能正常呈显不是好的想法,
: 但专案的时间不够为原有的系统开发行动版,而且系统某些入口
: 前後端也绑得很死,可能也难以修改,暂时只能蒙着头硬上了....
:
: 先谢谢大家的协助!
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.230.164.28
: ※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Ajax/M.1403611164.A.CE5.html
: 推 mrbigmouth:没试过 不过我在想有没有办法套iframe 之後从外部将 06/24 21:24
: → mrbigmouth:iframe内部的函数如window.open取代为适合的api? 06/24 21:24
:
: 这方法已经试过,但因为我要载入的网页和原本 App 网页不是同源的
: 所以结果看起来是不太行,浏览器好像会因为安全性而挡掉操作。
:
: 推 shadowjohn:InAppBrowser 有 executeScript 可以用啊~ 06/25 15:28
: 推 shadowjohn:不过 backbutton 的事件改不了~ :( 06/25 16:46
: 推 shadowjohn:搭loadstop 可以让你把你想动态处理的 js 放入~ 06/25 16:48
:
: 後来我有试用这个方法,但现在遇到的困难是,要载入的网页本身是个 frameset
: 的框框里面再塞入几个 frame
: 在 loadstop 事件之後好像没办法执行 js,请问这是 frameset 的标准吗?
:
: 推 mrbigmouth:都什麽年代了还在用frameset啊XDDD 06/25 20:52
:
: 工作嘛~ 总是会有些不是挑战 IQ, 反而挑战 EQ 的东西 (摊
:
: 推 shadowjohn:可以用Interval loop 来检查frameset 的内容是否生成 06/26 08:27
: → shadowjohn:先写实体function再用 .toString() 喂给 code~ 06/26 08:30
:
: 我前端不强,请问要怎麽检查 frameset 的内容呢?
: 这边我猜是 eval 的方法执行 function 的做法? 不太懂意思~
如果你会 php,装载一下 phpjs ,你会有 print_r 可以使用~
反正在dump array、object 都很方便~
例如 alert(print_r($(window.contents).contents().find("body"),true));
即然你会用 InnAppBrowser 那你应该知道他是可以喂 code 的
https://github.com/apache/cordova-plugin-inappbrowser/blob/master/doc/index.md
ref.addEventListener('loadstop', function(event){
//这边我们不会用到 event ,但需要用 executeScript
//so ...
var tmp_func = function(){
//你希望在页面打开後作什麽事
//试印这个inappb 的内容
alert($('body').html());
//有成功就照你说的继续往 frameset 找
//试找 frameset 里的 body 是不是有找到数量,这边有可能会还没等到,所
//以可以作一个简单的setInterval keep look
var the_frameset =
$($("body").find("你的frameset的id").eq(0).contents());
//有可能会因为 frameset 还没 ready
the_frameset.ready(function(){
alert(
the_frameset.find("body").size()
);
});
};
ref.executeScript({
code:tmp_func.toString()
});
});
:
: 顺便想再请问 InAppBrowser executeScript 的里面程式码,
: 如果在装置上测试时,有办法写到 Android LogCat 之类的地方吗?
: 还是要用 weinre 之类的做法来取得执行讯息呢?
:
logcat 可以在 javascript 里写 console.log("HelloWorld");
: 谢谢~
: ※ 编辑: dream1124 (1.162.125.133), 06/26/2014 20:40:48
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.240.250.239
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Ajax/M.1403881000.A.91F.html
1F:推 dream1124:谢谢!! 06/29 23:16