我受命重写从2000年开始构建的Javascript代码,因为它只能在IE浏览器中使用。它需要在所有浏览器中都能工作。
显然,这早于AJAX,他们使用框架集(甚至还没有iframe)将远程JSP / servlet调用执行到HTML框架中。这些框架除主框架外不显示任何HTML。然后,您需要确保更新代码参考,以了解从哪个帧执行哪个代码。这些框架让人头疼,但是我已经获得了这些调用才能在除Safari之外的所有浏览器中使用。
app.post("/api/login", async(req, res) => {
console.log(req.body)
const id = await users.login(req.body.username, req.body.password)
console.log(id)
currentID = currentID.concat(id)
})
app.get("/api/user", async(req, res) => {
res.json(currentID)
currentID = []
})
从那里,我将转到最上面的文档以查找要加载的特定框架。 url变量是一个JSP页面,具有由Java scriptlet创建的javascript。噩梦,是的,但是我没有时间/批准从头开始重写。
我在Safari中尝试了window.top,但是没有运气。该代码根本不会在Safari中执行。我也尝试过使用AJAX GET完全绕开框架,该AJAX GET在所有浏览器中均可使用,但是由于它是JavaScript,因此我必须使用eval,这是有效的安全风险。
$('frame[name="RegtypeFrame"]', window.parent.document).attr("src", url);
有人对如何解决此问题有任何建议或替代方法吗?我有一个解决方法,但这是有缺陷的安全风险。
答案 0 :(得分:0)
原始代码似乎现在可以在Safari中使用,尽管我不确定原因。我在以前的尝试中清除了开发人员缓存。也许还有其他我不知道的缓存。如果您尝试通过ID选择框架,则不适用于非iframe。
render(){
const columns = [
{
text: 'VehicleName',
dataField: 'VehicleName',
sort: true,
filter: numberFilter()
},
{
text: 'Status',
dataField: 'Status',
sort: true
},
{
text: 'Direction',
dataField: 'Direction' ,
sort: true
},
{
text: 'IsOldData' ,
dataField: 'isOldData',
sort: true
},
{
text: 'DriverPersNo' ,
dataField: 'DriverPersNo',
sort: true
},
{
text: 'Speed' ,
dataField: 'Speed',
sort: true
},
{
text: 'PosLat' ,
dataField: 'PosLat',
sort: true
},
{
text: 'PosLong' ,
dataField: 'PosLong',
sort: true
},
{
text: 'DateTimeGpsUtc' ,
dataField: 'DateTimeGpsUtc',
sort: true
},
{
text: 'DateTimeGpsLocal' ,
dataField: 'DateTimeGpsLocal',
sort: true
}]
return <BootstrapTable hover keyField='VehicleName' data=
{this.state.vehicleInfo} columns={columns}
filter={filterFactory() }
pagination={ paginationFactory() }/>;
}