2010-08-04 180 views
2

我有一个JavaScript文件,它在网站上嵌入了一个小部件。我希望能够通过以下形式的URL来调用这个小部件:通过调用URL传递JavaScript参数

http://domain.com/widget.js?variable=test 

在JS脚本我希望能够在URL参数“变量”,这是这种情况下是“价值阅读测试“并将其用于JS输出的HTML代码中。我尝试使用window.location,但返回主网页的URL而不是正在调用加载脚本的URL。

任何想法的JS代码看起来像传递参数中读取?提前致谢!

+0

'document.location.search'或'parent.document.URL'有帮助吗? – vol7ron 2010-08-05 00:08:22

回答

3

使用getElementsByTagName遍历所有<script>元素。通过检查src属性查找标识脚本的标识(例如,通过查找domain.com/widget.js)。从src属性中提取查询字符串。

例子:

function getScriptQuery(identifier) { 
var scripts = document.getElementsByTagName('script'), 
    i, curScript; 

for (i = 0; i < scripts.length; ++i) { 
    curScript = scripts[i]; 

    if (curScript.src.match(identifier)) { 
    return (curScript.src.match(/\?.*/) || [undefined])[0]; 
    } 
} 
} 

alert(getScriptQuery('widget.js')); 

有解决您的原始数据传递到脚本的问题,有两种常见的替代品。

您可以在脚本中引用一个已知的全局变量,并有主叫HTML定义变量:

<script type="text/javascript">var MyWidgetData={foo:'bar'};</script> 
<script src="http://my.widgeteer.net/widget.js"></script> 

// widget.js: 

alert(MyWidgetData.foo); 

你也可以换你的脚本作为命名功能,并具有调用HTML调用该函数:

<script src="http://my.widgeteer.net/widget.js"></script> 
<script type="text/javascript">MyWidget({foo:'bar'});</script> 

// widget.js: 

function MyWidget(data) { 
    alert(data.foo); 
} 
+0

这真的是最简单的方法吗? JavaScript必须有一些更有效的方法来读取调用它的URL。我猜不会。如果这是最简单的方法,我不确定会是什么样子?你能提供一些示例代码吗? – 2010-08-04 21:17:08

+0

快速跟进。有没有更好的方式来传递参数而不是调用URL?也许在脚本标签中添加它们? – 2010-08-04 21:37:25

+0

@Russell C.,增加了一个例子。如果'src'中指定的脚本执行,'