Re: [問題] 取代phoneGap InAppBrowser api的可能?
※ 引述《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://www.ptt.cc/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://www.ptt.cc/bbs/Ajax/M.1403881000.A.91F.html
推
06/29 23:16, , 1F
06/29 23:16, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):