台灣最大程式設計社群網站
線上人數
1502
 
會員總數:245392
討論主題:189182
歡迎您免費加入會員
討論區列表 >> Java Script/ Node.js >> 自動填值到外部網頁
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
自動填值到外部網頁
價值 : 160 QP  點閱數:194 回應數:5

樓主

Stephanie Hwang
門外漢
0 1
98 2
發送站內信

最近接到一個任務那就是
「不更動舊有網頁的程式碼下」
將新設網頁值自動填入舊有網頁。
(舊有網頁跟新設網頁是屬不同server主機,各電腦系統間之通訊均透過TCP/IP Ethernet網路)

一開始我是用javascript寫,
在我自已的本機端建立了parents 與 child 兩個網頁,將 parents 網頁的值倒入 child 網頁,
而javascript寫在 parents 網頁 ,利用window.open 的方式去撰寫。

↓parents 網頁
[code]
var popup; //子視窗

function OpenPopup() {
popup = window.open("child.html", "_blank");
console.log(popup);
popup.onload = function () {
SendToPopup()
}
}

function SendToPopup() {

if (popup != null && !popup.closed) {

//下拉選單
var s = document.getElementById('Day');
var i = s.options.selectedIndex;
var a = s.options[s.options.selectedIndex].value;


//子視窗向元件宣告
var lblFirstName = popup.document.getElementById("lblFirstName");
var lblLastName = popup.document.getElementById("lblLastName");
var selDay = popup.document.getElementById('selDay');
var intDate = popup.document.getElementById('dd');
var intYesorno = popup.document.getElementById('yesrono');
var location = popup.document.getElementById('location');

var value_num = new Object();

//對向元件給值
//input給值
lblFirstName.value = document.getElementById("txtFirstName").value;
lblLastName.value = document.getElementById("txtLastName").value;
intDate.value = document.getElementById("dd").value;

//checkbox
findCheckbox(value_num, 'yesorno');
intYesorno.value = value_num.value;
popup.document.getElementsByName('yesorno1')[value_num.num].checked = true;

//radio
findCheckbox(value_num, 'location');
location.value = value_num.value;
popup.document.getElementsByName('location1')[value_num.num].checked = true;


//下拉選單給值
selDay.selectedIndex = i;

//鎖定子視窗
popup.focus();
} else {
alert("Popup has been closed.");
}
}
[/code]

後來將child.html 的url改為舊有的網頁網址後,就無法順利將值傳入外部網頁

然後爬了很多網路的文章跟方法,也求救過同事

同事是說同是web,應該能捉到值...

因為我還是小菜鳥,領悟力還不夠

是否觀念有誤
還是
有其它方法可以達到將值填入外部網頁?









搜尋相關Tags的文章: [ 自動填入 ] , [ 不同主機 ] ,
本篇文章發表於2019-10-15 09:54
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
「不更動舊有網頁的程式碼下」
基本上你不用玩了...

因為現在的瀏覽器都禁止修改外部網頁的數值了(僅僅是Client的文字內容也不允許)

=================================
我曾經使用過的配套方式:利用IP分享器, 把2台主機藏在背後, 分別使用port 8080與port80,
讓瀏覽器[認定為相同主機, 相同域名], 就可以讓你這樣直接改網頁數值


=================================
另一種方式:統一要求使用者, 使用IE6的瀏覽器...(如果是公司內部系統大概可以這樣子要求)
本篇文章回覆於2019-10-15 10:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
跨網域基本上不太可能吧
除非舊網頁原本就相關的接口
不然基於安全性理由JS的操作大部分都會被瀏覽器擋下
如果是公司的內部系統,可以試試看撰寫開發版chrome外掛來達成
本篇文章回覆於2019-10-16 09:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

P陳
檢舉此回應
不知可不可行
1.用webBrowser 將新舊網頁都開起來
2.將舊網頁的資料讀出 到新網頁填入
3.因為新舊網頁都在 WebBrowser 控制之下,由WebBrowser存取,而不是網頁內直接丟,也許可以避開 #1 #2 樓所說的問題
本篇文章回覆於2019-10-16 20:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
一般想要透過js來做傳址,依照安全性原則。不可能在不同網域下做值傳送動作的。

所以你只能利用post跟get的方式來處理。
但如果在不可變動舊程式碼的情況下。一般來說你也不用玩了就是了。

本篇文章回覆於2019-10-17 00:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Stephanie Hwang
檢舉此回應
感謝各位大神的回覆。

後來我有找到個套件來解決我的功需求
因網頁是用vs開發,語言是用vb。

首先,套件是用「Selenium」
後端程式碼
Function SetUp(url As String, js As StringBuilder)
Dim options As ChromeOptions = New ChromeOptions()
options.AddArguments("disable-infobars")
Dim driver = New ChromeDriver(options)
driver.Manage().Window().Maximize()
driver.Manage().Cookies.DeleteAllCookies()
driver.Navigate().GoToUrl(url)
driver.ExecuteScript(js.ToString)
Return True
End Function
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
url = "https://www.google.com/"
js.Append("document.getElementsByName('q')[0].value='" + TextBox1.Text + "'")
SetUp(url, js)
End Sub


順利將我輸入在新設計網頁的值,帶入到googoe首頁搜詢框(當然這個只是範例,主要傳達是可以將值不受限制的傳到任何一個網站)
以上若有錯誤,敬請指教。

不過,其主中不足的是,另開新頁由於是使用*ChromeDriver,所以頁面會顯示chrome 目前受到自動測試軟體控制,一直還沒找到無法將它關閉方法。
本篇文章回覆於2019-10-28 11:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.