【问题标题】:chrome extension desktop notification send get paramschrome 扩展桌面通知发送获取参数
【发布时间】:2012-02-05 00:34:17
【问题描述】:

我想向我的桌面通知发送一些参数,但我无法检索它们。

我使用该代码打开通知:

var notification = webkitNotifications.createHTMLNotification(
  '../html/notification.html?data='+nb
);

nb 是我的变量。

notification.html:

<!DOCTYPE html>
<html>
<head>
<title>Notification</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="../js/notification.js"></script>
</head>
<body>
    <div id="message">Vous avez <span></span></div>
</body>
</html>

notification.js:

function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}
var first = getUrlVars()['data'];

$('#message span').html(first +' nouveau message');

例如,结果是“Vous avez”而不是“Vous avez 1 nouveau message”。

我检查了我的 notification.js 是否已加载。 如何检查“first”的值?如何调试该JS代码? 或者您有更好的方法来检索 URL 中的 GET 参数?

非常感谢。

问候

【问题讨论】:

    标签: jquery google-chrome-extension url-parameters


    【解决方案1】:

    查询字符串未设置为使用 JS 轻松解析。只需要传递一个String吗?

    如果是这样,请使用哈希而不是查询字符串:

    var notification = webkitNotifications.createHTMLNotification('../html/notification.html#' + nb);
    

    然后在notification.js中:

    $('#message span').html(window.location.hash.substr(1) + ' nouveau message');
    

    如果需要传递多个变量,可以使用 Stringified JSON 对象:

    var data = {
            var1: "somedata",
            var2: 12345
        },    
        notification = webkitNotifications.createHTMLNotification('../html/notification.html#' + JSON.stringify(data));
    

    然后在notification.js中:

    var data = JSON.parse(window.location.hash.substr(1));
    $('#message span').html('var1 is ' + data.var1 + ' var2 is' + data.var2);
    

    如果您遇到解析错误,您可能必须使用 encodeURIComponenet()decodeURIComponent()

    【讨论】:

    • 它适用于第二种方式,我忘了用 jQuery .ready() 将我的代码包装在 notification.js 中
    • 啊,这样就行了。很高兴你明白了。
    猜你喜欢
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2016-06-09
    • 2022-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多