2016-02-04 86 views
1

我尝试在重定向到页面后执行js函数,比如当DOM准备好与他一起工作时“example.com”,但它不起作用。 $(document).ready()在“example.com”加载之前正在运行。哪里不对?这里是我的代码:

window.location = "http://example.com"; 
$(document).ready(function(){ 
    //DO SOMETHING WHEN PAGE 'example.com' IS LOADED 
}); 

我将不胜感激您的帮助!

+0

我倾向于关闭此作为http://stackoverflow.com/questions/12921345/execute-javascript-的副本这个问题本身就是一个重复的问题,而另一个重复问题与这里提出的问题并不完全相同。 – zzzzBov

回答

3

你根本无法做你想做的事。当页面更改为"http://example.com"时,这会启动一系列事件,最终导致整个Javascript上下文停止。您无法在新页面的此页面上运行Javascript。

当分配:

window.location = "http://example.com"; 

这开始的过程将停止使用Javascript的执行在当前页面。当前页面被卸载并且与其相关联的所有内存都被释放。然后,加载一个新页面,创建一个新的Javascript上下文,然后加载并运行该新页面中的Javascript。


一个新的页面进行通信的常用方法是把想要在新的页面上运行,然后把一些参数是新页面,它的JavaScript可以检测并作出相应反应的JavaScript。

例如,你可以这样做:

window.location = "http://example.com?doSomething=whatever"; 

而且,然后加载新的页面时,JavaScript的在该页面可以查看查询字符串,看看是否有特殊的参数传递给它。如果是,那么该Javascript可以解析它们并根据这些查询字符串参数决定要执行的行为。


另一种可能性是不使用window.location。相反,您可以通过Ajax获取新的HTML,然后在当前页面中使用Javascript将新内容插入当前页面(或用新内容替换现有内容)。使用jQuery,您可以使用jQuery的​​加载从URL的内容直接放入一个元素在当前页是这样的:

$("#myDiv").load(someURL); 

由于这是阿贾克斯,它具有一切正常跨来源的限制,任何Ajax调用可能有这样你不能自由地加载其他网站的页面(除非它们允许跨源访问)。

+0

“这会停止执行当前页面中的Javascript。”实际上并不完全,像onbeforeunload事件这样的事件会被触发,我相信一些浏览器甚至允许卸载执行,以便在localStorage中执行存储状态等操作。 – zzzzBov

+1

@zzzzBov - 我将其纳入我的答案。 – jfriend00

+0

@ jfriend00 - 也许它是从本地执行代码的任何方式?我的想法:本地保存js作为文件 - >在window.location之后运行。 Mayby,我们可以使用本地脚本将参数加载到js页面。无论如何感谢您的快速回答。这是我的第一篇文章。我很快就知道答案/解释给我留下了深刻的印象。 btw对不起,我的英语:( –

0

嵌入在页面中的JavaScript程序仅在该页面打开时运行。

如果你离开页面,通过加载一个新页面(这是你正在做的),然后它停止运行。

只能使用浏览器的功能将JavaScript插入到下一页。你必须有一些机制将其传递给服务器。

+0

好的,我明白了,谢谢 –

0

我想要一些JavaScript插入值从www.mypage.comwww.example.com,然后单击提交按钮。 感谢您的澄清,但我决定在Python和PHP中使用Selenium。或者有什么办法可以用JavaScript来做到这一点?

run_search.py​​

import sys 
from selenium import webdriver 

def insertContent(myElement): 
    driver = webdriver.Firefox() 
    driver.get("http://www.google.com") 
    elem = driver.find_element_by_id("lst-ib") 
    elem.send_keys(myElement) 
    BUTTON_XPATH = '//button[@type="submit" @name="btnI"]' 
    button = driver.find_element_by_xpath(BUTTON_XPATH) 
    button.click() 

if __name__ == '__main__': 
    insertContent(sys.argv[1]) 

mypage.php

<?php 
    $my_value = "Python"; 
    $exec_py = shell_exec('python run_search.py '.$my_value); 
?> 
相关问题